MySQL 日誌是資料庫運行的「黑盒子」,記錄了啟動、查詢、錯誤、複制、事務等關鍵資訊。善用日誌能協效能調優、故障排查、資料恢複制。本文系統整理六大日誌類型、核心參數與常用操作,助您建立完善的日誌管理體系。
| 日誌類型 | 功用 | 典型應用場景 |
|---|---|---|
| 錯誤日誌 | 記錄啟動/關閉/運行錯誤、警告、事件調度器資訊 | 故障診斷、監控告警 |
| 一般查詢日誌 | 記錄客戶端連接與執行的語句 | 審計、問題 SQL 追蹤(高負載慎開) |
| 慢查詢日誌 | 記錄執行時間超過 long_query_time 或未用索引的查詢 | 效能調優、發現慢 SQL |
| 二進制日誌 | 記錄所有改變資料的操作(Statement/Row/Mixed 格式) | 主從複制、時間點恢復 |
| 中繼日誌 | 從庫從主庫二進制日誌複製來的事件 | 複制架構中從庫重放 |
| 事務日誌 | InnoDB 重做/撤銷日誌,保證 ACID | 崩潰恢復、事務隔離 |
使用 SHOW GLOBAL VARIABLES LIKE '%log%'; 可檢視所有日誌相關變數。以下列出生產環境必須掌握的關鍵參數:
log_error:錯誤日誌檔案路徑(預設 hostname.err)log_warnings:是否記錄警告(1=開啟,>1 記錄連線失敗)general_log:ON/OFF 啟用開關general_log_file:日誌檔案路徑log_output:FILE/TABLE/NONE 輸出目標⚠️ 生產環境建議關閉,否則大量 I/O 會嚴重影響效能。
slow_query_log:ON/OFFslow_query_log_file:日誌路徑long_query_time:慢查詢閾值(秒,預設 10,支援毫秒)log_queries_not_using_indexes:是否記錄未用索引查詢建議:生產環境開啟,設定 long_query_time=1 或更低,定期分析 mysqldumpslow 或 pt-query-digest。
log_bin:啟用二進制日誌(指定基礎檔名)binlog_format:ROW / STATEMENT / MIXED(建議 MIXED)expire_logs_days:自動清理天數(預設 0 不清理,建議 7~30)max_binlog_size:單檔上限(預設 1G)sync_binlog:同步頻率(1=最安全,N=效能折衷)常用管理指令:
-- 查看當前二進制日誌 SHOW MASTER STATUS; -- 查看所有二進制日誌 SHOW BINARY LOGS; -- 手動切換日誌 FLUSH LOGS; -- 刪除指定日誌之前的檔案 PURGE BINARY LOGS TO 'mysql-bin.000025'; -- 解析二進制日誌內容 mysqlbinlog --start-position=407 --stop-position=556 mysql-bin.000033
innodb_flush_log_at_trx_commit:1=每次提交刷盤(最安全),0/2=效能優先innodb_log_file_size、innodb_log_files_in_group:重做日誌檔案大小與數量innodb_log_buffer_size:日誌緩衝區大小FLUSH LOGS 會重命名舊檔為 .old)。log_queries_not_using_indexes=ON 發現潛在問題。expire_logs_days 防止磁碟爆滿,備份前記錄 SHOW MASTER STATUS 位置。Seconds_Behind_Master、錯誤日誌關鍵字、磁碟空間使用率。掌握日誌機制,等於掌握了 MySQL 的「心電圖」,能在故障發生前發現隱患,故障發生時快速定位根因。