MySQL各種日誌總結
日誌類型:
- 錯誤記錄檔(error log)
- 常規日誌(general log)
- 二進位日誌(bin log)
- 中繼日誌(relay log)
- 慢日誌(slow log)
- InnoDB引擎的redo log
錯誤記錄檔
log-error = error.log
不加儲存路徑儲存到datadir下,如果不指定名字是hostname.err
記錄mysql啟動關閉,運行中的異常或是重要提示資訊
在生產環境中,監控這個日誌
全量日誌(常規日誌)
general_log = OFF|ON
general_log_file = general.log
不指定路徑儲存到datadir下,如果不指定名字是hostname.log
開啟後,記錄client和資料庫的所有請求
二進行日誌 最大檔案數為2的32次方個
log-bin = /data/mysql/mysql3306/logs/mysql-bin
設定二進位日誌的儲存位置及prefix名字
用記錄資料庫寫入操作的日誌,可以用於備份或是master/slave的複製,必須有server-id
如果沒有可以通過修改記憶體裡的值加上,但是有風險
不能太快產生,盡量大些,5分鐘左右產生一個日誌
log_bin = /data/mysql/mysql3306/log/mysql-bin 是否開啟binlog
log_bin_index = /data/mysql/mysql3306/log/mysql-bin.index
指定binlog的一個索引檔案,預設是在datadir形成log_bin的prefix名index
binlog_do_db = thunder
用於指定只記錄那個庫的二進位日誌(建議不要用)
max_binlog_size = 500M
指定binlog的大小為500M一個檔案,預設是1G
expire-logs-days = 5
指定保留binlog的天數
binlog_format = row
指定binlog的日誌格式,支援statement,row,mixed格式
statement格式記錄原生的sql
row格式裡沒有,但5.6後增加了一個query event可以看到原來的sql
binlog_rows_query_log_events 預設是off
mixed格式是兩種形式的混合體,DDL語句記錄statement格式,DML語句記錄row格式
推薦使用row格式
binlog_row_image = full
控制日誌中binlog的詳細相關的程度,支援full(default),minimal,nobolb
minimal:只記錄變化的行和唯一識別欄位
nobolb:除了blob,text其它列都記
binlog_error_action = abort_server
當遇到mysql不能寫binlog時,報出異常,預設是ignore error不報錯
binlog_direct_non_transactional_updates = on
對於非事務引擎表,直接走日誌,不走2pc提交,預設是不支援
binlog_order_commit = on
按順序寫入日誌
binlog_cache_size=1M 已經很大
此參數表示binlog使用的記憶體大小,可以通過狀態變數binlog_cache_use和bin_cache_disk_use 來協助測試
binlog_cache_use:使用二進位日誌緩衝的事務數量
binlog_cache_disk_use:使用二進位日誌緩衝但超過binlog_cache_size值並使用臨時檔案來儲存事務中的語句的事務數量
binlog_checksum (5.6.2引入)在高版本上修改
mysql5.6.6後預設是crc32,之前版本是none
在啟用這個參數之前對於日誌的完整校正就是通過對比長度,引入新的方式後,利用新方法對內容進行校正
binlog_rows_query_log_events (5.6.2引入)
只作用於RBR格式,預設不啟用
如果啟用,會把使用者寫直的原生態DML操作記錄到binlog中
log_bin_use_v1_row_events (5.6.6引入)
預設是0,如果使用1是使用Version1的格式,mysql5.5可以認出來的形式,如果0是5.6.6後使用的version2格式
sync_binlog = 1|0
這個參數對效能影響嚴重,資料一致性條件要求高調整為1,效能差別大概為10倍
當事務提交後,mysql僅僅是將binlog_cache中的資料寫入binlog檔案,但不執行fsync之類的磁碟同步指令通知檔案系統將緩衝重新整理到磁碟,面讓filesystem自行決定什麼時候來同步,這個是效能最好的。
sync_binlog=n 在進行n次事務提交以後,mysql將執行一次fsync之類的磁碟同步指令,同步檔案系統將binlog檔案快取重新整理到磁碟。
mysql中預設的設定是sync_binlog=0,即不作任何強制性的磁碟排清指令,這是效能是最好的,但風險也是最大的。一旦系統crash,在檔案系統快取中的所有binlog資訊都會丟失
中繼日誌
relay-log = relay-bin
設定中繼日誌的名稱首碼,不指定路徑預設在datadir下
log_thread從master就讀到的日誌寫到中繼日誌中,供sql_thread執行,以完成複製
慢日誌
slow-query-log-file = slow.log
slow-query-log
long_query_time=1
是怎麼計時的,
ddl語句 exec時間
dml語句 select從等待鎖開始計時,insert只記錄執行時間
利用slow-query-log這個參數開啟慢日誌,slow-query-log-file指定慢日誌的名稱,不指定路徑預設在datadir下
建議每天一個檔案,時間長可能會很大,做定時任務
Innodb的redo log 《交易處理概念》交易處理聖經
innodb_log_group_home_dir=/data/mysql/mysql3317/logs 預設在datadir下
SSD磁碟中,記錄檔不要放在SSD磁碟中,普通硬碟即可
innodb_log_file_size = 200M 512M左右即可
innodb_log_files_in_group = 3 個數
指定redo log的儲存位置及大小,檔案個數
Innodb事務操作不可缺少的一個環節
本文永久更新連結地址: