1. 程式人生 > 實用技巧 >MySQL學習筆記(26):日誌

MySQL學習筆記(26):日誌

本文更新於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 TABLEANALYZE TABLECHECK TABLEOPTIMIZE TABLEREPAIR TABLECREATE INDEXDROP 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等工具。