MySQL 多種日誌類型各有用途,合理配置與維護策略關乎效能調優、資料恢復與安全審計。本文整理五大日誌特性、生產環境配置建議與關鍵參數調優。
| 日誌類型 | 記錄內容 | 主要用途 | 建議狀態 |
|---|---|---|---|
| 錯誤日誌 | 啟動/運行/停止錯誤 | 故障診斷 | 永久開啟 |
| 一般查詢日誌 | 客戶端連線、執行語句 | 開發除錯、審計 | 生產關閉,臨時開啟 |
| 二進制日誌 | 所有修改資料的語句 | 主從同步、時間點恢復 | 生產必開 |
| 慢查詢日誌 | 超過閾值或無索引查詢 | 效能調優 | 生產開啟 |
| 事務日誌 | InnoDB 事務操作 | 崩潰恢復、ACID 保證 | 引擎內建自動管理 |
[mysqld] slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 秒,建議 1-2 秒 log_queries_not_using_indexes = ON min_examined_row_limit = 100 # 忽略掃描行數少的查詢
生產建議: 開啟並定期分析 (用 mysqldumpslow 或 pt-query-digest),調優後可關閉減少 I/O。
-- 動態開啟/關閉 SET GLOBAL general_log = 1; -- ON SET GLOBAL general_log = 0; -- OFF -- 查看配置 SHOW GLOBAL VARIABLES LIKE '%general_log%';
⚠️ 生產環境嚴禁長期開啟,日誌量極大嚴重影響寫入效能。
[mysqld] log-bin = mysql-bin server-id = 1 max_binlog_size = 512M # 單檔上限,建議 512M-1G binlog_format = ROW # ROW 格式最安全,支援主從同步 expire_logs_days = 7 # 自動清理 7 天前日誌 sync_binlog = 1 # 每次提交刷盤,最安全但效能損耗最大
| 值 | 行為 | 安全性 | 效能 |
|---|---|---|---|
| 0 (預設) | 交由 OS 決定刷盤時機 | 低,崩潰丟失 binlog_cache | 最佳 |
| 1 | 每次提交強制 fsync | 最高,僅可能丟失未提交事務 | 最差,高併發下效能下降 5x+ |
| N (>1) | 每 N 次提交 fsync | 中等 | 折中 |
建議: 金融核心業務設 1,一般業務可設 100-1000 平衡效能與安全。
[mysqld] binlog_cache_size = 4M # 事務緩衝區,大事務需調大 max_binlog_cache_size = 2G # 最大緩衝區,防止多語句事務報錯 innodb_log_buffer_size = 64M # InnoDB 重做日誌緩衝 innodb_log_file_size = 512M # 重做日誌檔案大小 innodb_log_files_in_group = 2
# 查看二進制日誌內容 mysqlbinlog mysql-bin.000001 | more mysqlbinlog --start-datetime="2023-01-01 00:00:00" --stop-datetime="2023-01-01 23:59:59" mysql-bin.000001 # 手動切割日誌 FLUSH LOGS; # 清理過期日誌 (需謹慎) PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00'; PURGE BINARY LOGS TO 'mysql-bin.000100';