久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解mysql的各種日志

149次閱讀
沒有評論

共計 7322 個字符,預計需要花費 19 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關如何理解 mysql 的各種日志,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

mysql 錯誤日志:

錯誤日志記錄的事件:

a)、服務器啟動關閉過程中的信息

b)、服務器運行過程中的錯誤信息

c)、事件調試器運行一個事件時間生的信息

d)、在從服務器上啟動從服務器進程時產生的信息

log_error 參數指定錯誤日志存放路徑以及文件名。如果不指定文件,默認文件名是 [host_name].err,保存路徑為 %datadir%。

mysql show variables like
%log_error%

+————+——————————————————-+

| Variable_name | Value                                        |

+————+——————————————————-+

| log_error  |
D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02.err   |

+————+——————————————————-+

1 row in set (0.00 sec)

mysql show variables like
%datadir%

+—————+—————————————+

| Variable_name  | Value                         |

+—————+—————————————+

| datadir   | D:\Quarkp2p\mysql-5.6.19-winx64\data\  |

+—————+—————————————+

1 row in set (0.00 sec)

錯誤日志中記錄的信息分為三類:[Note],[warning],[Error]。可以通過設置 log_warnings 來控制警告信息是否被記錄,默認值為 1 表示記錄,為 0 表示禁用。如果大于 1,則對于連接失敗、新連接拒絕等類型的消息也會被寫入到錯誤日志中去。

mysql show variables like %log_warning%

+—————+——-+

| Variable_name  | Value  |

+—————+——-+

| log_warnings   |
1   |

+—————+——-+

1 row in set (0.00 sec)

mysql 的查詢日志:

查詢日志記錄查詢語句與啟動時間,建議不是在調試環境下不要開啟查詢日志,因為會不斷占據你的磁盤空間,并會產生大量的 IO。

查詢日志有兩種,分別是慢查詢日志(Slow Query Log)和通用查詢日志(General Query Log)。而且 mysql 的查詢日志不僅可以記錄到文件,還能自動保存到 MySql 數據庫中的表對象里。

1、慢查詢日志:

指的是所有查詢語句執行時間超過系統變量 long_query_time(默認值是 10 秒)指定的參數值,并且訪問的記錄數超過系統變量 min_examined_row_limit(默認值是 0 條)的數量的語句。這里的執行時間是不包括初始化表鎖的開銷。

慢查詢日志中語句記錄和順序有可能跟執行順序不同,因為每條語句執行完并且釋放了鎖資源之后,mysqld 才會將符合條件的 sql 語句寫入到慢查詢日志中去。

開啟和禁用慢查詢日志通過以下兩個系統參數,這兩個參數可以動態修改:

slow_query_log  指定是否輸出慢查詢日志,1 表示輸出,0 表示不輸出,默認為 0。

slow_query_log_file  指定日志文件存儲路徑和文件名,如果沒有指定,默認文件名為 [host_name]-slow.log,保存路徑為 %datadir%。

mysql show variables like %slow_query_log%

+——————+———————————————————+

| Variable_name   | Value   |

+——————+———————————————————+

| slow_query_log   |
OFF   |

| slow_query_log_file  |
D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02-slow.log |

+——————+———————————————————+

2 rows in set (0.00 sec)

全局禁用 / 開啟慢查詢日志:

SET GLOBAL slow_query_log= OFF

SET GLOBAL slow_query_log= ON

其他參數:

long_query_time

log_short_format

log_slow_admin_statements

log_queries_not_using_indexes

log_throttle_queries_not_using_indexes

log_slow_slave_statements

mysqld 判斷一條 sql 語句是否需要被記錄到慢查詢日志時做的判斷步驟如下:

1)判斷執行的是查詢語句,還是管理性語句

2)查詢語句執行的時間達到或者超過了 long_query_time 參數值,或者是符合 log_queries_not_using_indexes 條件

3)查詢的記錄量達到了 min_examined_row_limit 參數值

4)查詢語句不違反 log_throttle_queries_not_using_indexes 設定的值

如果慢查詢日志非常大,可以用 mysql 自帶的 mysqldumpslow 命令,或者其他第三方工具查看分析。

2、通用查詢日志:

這個日志可以記錄 mysqld 進程所做的幾乎所有操作,包括 sql 語句執行,數據庫對象管理,客戶端的連接和斷開。

這個日志的最大功能是審計。

開啟和禁用通用查詢日志通過以下兩個系統參數,這兩個參數可以動態修改:

general_log 
  指定是否輸出慢查詢日志,1 表示輸出,0 表示不輸出,默認為 0。

general_log_file  指定日志文件存儲路徑和文件名,如果沒有指定,默認文件名為 [host_name].log,保存路徑為 %datadir%。

mysql show variables like
%general_log%

+——————+——————————————————–+

| Variable_name   | Value 
|

+——————+——————————————————–+

| general_log   | OFF 
|

| general_log_file   |
D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02.log   |

+——————+——————————————————–+

2 rows in set (0.00 sec)

全局禁用 / 開啟通用日志:

SET GLOBAL general_log= OFF

SET GLOBAL general_log= ON

會話級禁用 / 開啟通用日志:

SET sql_log_off= OFF

SET sql_log_off= ON

通用查詢日志文件中語句出現的順序,是按照 mysqld 接收的順序。

3、配置查詢日志:

在 mysql 服務啟動時指定 –log-output 選項,可以決定查詢日志是保存在操作系統中的文件里,還是保存在數據庫系統中的專用表。

–log-output  可選值有三個:table,輸出到表,對應的表有 general_log 和 slow_log

  file,輸出到日志文件

  none,不輸出查詢日志

–log-output 可以設定多個值。

默認情況下,日志表使用 CSV 引擎,5.1 以后,日志表也可以修改為 MyIsam 引擎。

日志表(general_log 和 slow_log)支持 create table,alter table,drop table,truncate table,rename,check。不支持 lock tables,insert,update,delete 操作,日志表的增刪改查均由 mysql 服務內部自己進行。 

flush tables
with read lock 以及設置全局系統變量 read_only,對日志表無效。

日志表的寫操作不會計入二進制日志,有復制環境的話,日志表的內容也不會被復制到其他 Slaves 節點。

用 flush tables 或 flush logs 來刷新日志表或者日志文件。

日志表不允許創建分區。

二進制日志文件:

通過二進制日志文件,可以實現兩個重要的功能:用于復制,用于恢復。

啟用二進制日志文件,在 mysql 服務啟動時添加參數 –log-bin=[base_name]。如果不指定參數值,默認文件名為 [host_name]-bin.log,保存路徑為 %datadir%。

mysql show variables like
%log_bin%

+————————–+————————————————-+

| Variable_name   | Value   |

+————————–+————————————————-+

| log_bin   |
ON   |

| log_bin_basename   |
D:\Quarkp2p\mysql-5.6.19-winx64\data\mysql-bin   |

| log_bin_index   | D:\Quarkp2p\mysql-5.6.19-winx64\data\mysql-bin.index
|

|log_bin_trust_function_creators |ON   

| log_bin_use_v1_row_events  | OFF 
 |

| sql_log_bin   | ON   |

+————————–+————————————————-+

6 rows in set (0.00 sec) 

二進制日志文件不會只有一個,從序號 1 開始起,每次啟動 mysql 服務或者刷新日志時,生成一個新的二進制日志文件。而且單個日志文件不可能無限增長,當漲到參數 max_binlog_size 指定的大小時,就會創建新的二進制日志文件。但是也有可能日志文件比 max_binlog_size 指定的值要大,假如有執行的事務很大,所有的事務信息必須寫到一個日志文件中去。

為了跟蹤二進制日志文件的狀態,mysql 服務創建了一個和二進制日志文件同名,但是擴展名為.index 的二進制日志索引文件。這個文件中包含所有可供使用的二進制日志文件。

如果擁有 super 權限的用戶執行操作前,執行了 set sql_log_bin= 0 命令,則會禁止其執行的語句生產二進制日志。

–binlog-do-db 和 –binlog-ignore-db 兩個選項,表示指定那些庫記錄或者不記錄二進制日志,這兩個選項每次只能設定一個值,如果有多個庫,反復設置多條。

二進制日志文件的格式有三種:基于行格式記錄(row-based logging)、基于語句記錄(statement-based
logging)、混合模式記錄(mixed-based logging)。

因為 mysql 中既有支持事務的存儲引擎,也有不支持事務的存儲引擎,因此在操作基于不同的存儲引擎對象時,二進制日志的處理也不一樣。

對于非事務表來說,語句執行后就會立即寫入二進制日志文件中。而對于事務表,則要到等到當前沒有任何鎖定或未提交的信息時才會寫入二進制日志文件中,以確保日志被記錄的始終是其執行的順序。

使用 mysqlbinlog 命令行工具可以查看二進制日志文件。

binlog_cache_use 顯示了使用 binlog_cache_size 變量的事務數,包括臨時文件

binlog_cache_size 指定為線程分配多少內存空間

binlog_cache_disk_use  顯示了使用臨時文件的事務數

max_binlog_cache_size  用來限制事務能夠使用的最大緩存區(默認為 4G,也是最大值,最小值是 4096)。如果事務超出這個限制,則執行出錯,事務回滾。

事務日志:

事務日志文件名為 ib_logfile0 和“ib_logfile1”,默認存放在表空間所在目錄

與事務日志相關變量:

innodb_log_group_home_dir=/PATH/TO/DIR  #設定 InnoDB 重做日志文件的存儲目錄。在缺省使用 InnoDB 日志相關的所有變量時,其默認會在數據目錄中創建兩個大小為 5MB 的名為 ib_logfile0 和 ib_logfile1 的日志文件。作用范圍為全局級別,可用于選項文件,屬非動態變量。

innodb_log_file_size={108576 .. 4294967295}  #設定日志組中每個日志文件的大小,單位是字節,默認值是 5MB。較為明智的取值范圍是從 1MB 到緩存池體積的 1 /n,其中 n 表示日志組中日志文件的個數。日志文件越大,在緩存池中需要執行的檢查點刷寫操作就越少,這意味著所需的 I / O 操作也就越少,然而這也會導致較慢的故障恢復速度。作用范圍為全局級別,可用于選項文件,屬非動態變量。

innodb_log_files_in_group={2 .. 100}  #設定日志組中日志文件的個數。InnoDB 以循環的方式使用這些日志文件。默認值為 2。作用范圍為全局級別,可用于選項文件,屬非動態變量。

innodb_log_buffer_size={262144 ..
4294967295}  設定 InnoDB 用于輔助完成日志文件寫操作的日志緩沖區大小,單位是字節,默認為 8MB。較大的事務可以借助于更大的日志緩沖區來避免在事務完成之前將日志緩沖區的數據寫入日志文件,以減少 I / O 操作進而提升系統性能。因此,在有著較大事務的應用場景中,建議為此變量設定一個更大的值。作用范圍為全局級別,可用于選項文件,屬非動態變量。

innodb_flush_log_at_trx_commit = 1  #表示有事務提交后,不會讓事務先寫進 buffer,再同步到事務日志文件,而是一旦有事務提交就立刻寫進事務日志,并且還每隔 1 秒鐘也會把 buffer 里的數據同步到文件,這樣 IO 消耗大,默認值是 1,可修改為“2”

innodb_locks_unsafe_for_binlog = OFF  # 這個變量建議保持 OFF 狀態,詳細的原理不清楚

innodb_mirrored_log_groups = 1   # 事務日志組保存的鏡像數

中繼日志:

在復制環境中產的的日志信息

與中繼日志相關的變量:

log_slave_updates  #用于設定復制場景中的從服務器是否將從主服務器收到的更新操作記錄進本機的二進制日志中。本參數設定的生效需要在從服務器上啟用二進制日志功能。

relay_log=file_name  #設定中繼日志的文件名稱,默認為 host_name-relay-bin。也可以使用絕對路徑,以指定非數據目錄來存儲中繼日志。作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay_log_index=file_name  #設定中繼日志的索引文件名,默認為為數據目錄中的 host_name-relay-bin.index,作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay-log-info-file=file_name  #設定中繼服務用于記錄中繼信息的文件,默認為數據目錄中的 relay-log.info。作用范圍為全局級別,可用于選項文件,屬非動態變量。

relay_log_purge={ON|OFF}  #設定對不再需要的中繼日志是否自動進行清理。默認值為 ON。作用范圍為全局級別,可用于選項文件,屬動態變量。

relay_log_space_limit=  #設定用于存儲所有中繼日志文件的可用空間大小。默認為 0,表示不限定。最大值取決于系統平臺位數。作用范圍為全局級別,可用于選項文件,屬非動態變量。

max_relay_log_size={4096..1073741824}  #設定從服務器上中繼日志的體積上限,到達此限度時其會自動進行中繼日志滾動。此參數值為 0 時,mysqld 將使用 max_binlog_size 參數同時為二進制日志和中繼日志設定日志文件體積上限。作用范圍為全局級別,可用于配置文件,屬動態變量。

關于如何理解 mysql 的各種日志就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計7322字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 高碑店市| 吉木乃县| 西林县| 宣汉县| 金山区| 红原县| 丰台区| 宁安市| 定远县| 嘉兴市| 余姚市| 家居| 星子县| 勃利县| 博客| 博兴县| 东平县| 和平区| 比如县| 剑河县| 巢湖市| 西乌珠穆沁旗| 东港市| 高雄县| 泰安市| 峨山| 临邑县| 兴业县| 玛多县| 陈巴尔虎旗| 普兰店市| 秦安县| 北宁市| 集贤县| 武城县| 启东市| 沈阳市| 绍兴县| 大冶市| 烟台市| 吉林省|