本文更新於2020-05-03,使用MySQL 5.7,操作系統為Deepin 15.4。 MySQL有4種日誌:錯誤日誌、二進位日誌(BINLOG)、查詢日誌、慢查詢日誌。 錯誤日誌 錯誤日誌記錄了mysqld的啟動和停止,以及運行過程中發生的嚴重錯誤,其格式為純文本,預設開啟。 SHOW VAR ...
本文更新於2020-05-03,使用MySQL 5.7,操作系統為Deepin 15.4。
目錄
MySQL有4種日誌:錯誤日誌、二進位日誌(BINLOG)、查詢日誌、慢查詢日誌。
錯誤日誌
錯誤日誌記錄了mysqld的啟動和停止,以及運行過程中發生的嚴重錯誤,其格式為純文本,預設開啟。
SHOW VARIABLES
相關變數:
- log_error:當前的錯誤日誌文件名。
mysqld命令行選項:
- --log-error[=filename]:錯誤日誌文件名,預設為“主機名.err”,預設保存在datadir指定的目錄中。
二進位日誌
二進位日誌記錄了所有的DDL語句和DML語句,其格式為二進位,預設不開啟。
二進位日誌的格式分3種:基於語句(STATEMENT)的日誌格式SBL、基於行(ROW)的日誌格式RBL、混合(MIXED)格式。
SHOW VARIABLES
相關變數:
- binlog_format:二進位日誌格式。
- expire_logs_days:二進位日誌過期天數。
- log_bin:是否開啟二進位日誌。
- log_bin_basename:二進位日誌基於的文件名(實際的文件名會追加形如.000001的編號)。
- log_bin_index:二進位索引文件名。
- sql_log_bin:是否寫入二進位日誌。具有SUPER許可權可禁止將自己的語句寫入二進位日誌。
- sync_binlog:0表示由文件系統控制二進位日誌緩存的刷新,大於0表示每若幹條二進位日誌刷新文件系統緩存。
mysqld命令行選項:
- --binlog-do-db=dbname:沒顯式指定的資料庫不記錄二進位日誌。可指定多次。
- --binlog-ignore-db=dbname:沒顯式忽略的資料庫都記錄二進位日誌。可指定多次。
- --binlog-format=format:設置二進位日誌格式,可為STATEMENT、ROW、MIXED。
- --innodb-safe-binlog:經常和--sync-binlog一起使用,令事務在日誌中的記錄更安全。
- --expire-logs-days=n:設置二進位日誌的過期天數。
- --log-bin[=filename]:啟用二進位日誌並指定日誌文件名,預設為“主機名-bin”,預設保存在datadir指定的目錄中。
my.cnf配置[mysqld]:
- expire_logs_days=n:設置二進位日誌過期天數。
- log-bin[=basename]:打開二進位日誌並指定日誌文件名,預設為“主機名-bin”,預設保存在datadir指定的目錄中。需同時配置server-id,否則伺服器會無法啟動。
- server-id=id
刪除日誌有如下幾種方法:
- 執行
RESET MASTER
,刪除所有日誌,新的日誌編號從000001開始。 - 執行
PURGE MASTER LOGS TO 'hostname-bin.xxxxxx'
,將編號xxxxxx之前(不含)的日誌刪除。 - 執行
PURGE MASTER LOGS BEFORE 'yyyy-mm-dd HH:MM:ss'
,將指定時間之前的日誌刪除。
可使用FLUSH LOGS
刷新日誌文件。
查詢日誌
查詢日誌記錄了所有語句,其格式為純文本,預設不開啟。
SHOW VARIABLES
相關變數:
- sql_log_off:是否寫入查詢日誌。
mysqld命令行選項:
- --general-log[=0|1]:是否啟用查詢日誌。
- --general-log-file=filename:指定查詢日誌文件名,預設為“主機名.log”,預設保存在datadir指定的目錄中。
- --log-output[={NONE|TABLE|FILE}[,...]]:設置查詢日誌和慢查詢日誌的保存方式。NONE為不保存,其優先順序最高;TABLE為保存至表中,查詢日誌保存至mysql.general_log表,慢查詢日誌保存至msql.slow_logy表;FILE為保存至文件中,為預設值。
慢查詢日誌
慢查詢日誌記錄所有執行時間(獲得鎖的時間不算執行時間)超過long_query_time(秒)並且掃描記錄數不少於min_examined_row_limit的語句,其格式為純文本,預設不開啟。
預設情況下,有兩種語句不會記錄到慢查詢日誌:管理語句和不使用索引進行查詢的語句。管理語句包括ALTER TABLE
、ANALYZE TABLE
、CHECK TABLE
、OPTIMIZE TABLE
、REPAIR TABLE
、CREATE INDEX
、DROP INDEX
。
SHOW VARIABLES
相關變數:
- slow_query_log:是否啟用慢查詢日誌。
- slow_query_log_file:慢查詢日誌文件名。
mysqld命令行選項:
- --log-output[={NONE|TABLE|FILE}[,...]]:見查詢日誌相關選項說明。
- --log-queries-not-using-indexes:監控不使用索引進行查詢的語句。
- --log-slow-admin-statements:監控管理語句。
- --slow-query-log[=0|1]:是否啟用慢查詢日誌。
- --slow-query-log-file=filename:指定慢查詢日誌文件名,預設為“主機名-slow.log”,預設保存在datadir指定的目錄中。
my.cnf配置[mysqld]:
- slow_query_log:是否啟用慢查詢日誌。
其他日誌分析工具
還可以安裝使用mysqlsla、myprofi、mysql-explain-slow-log、mysqllogfilter等工具。