MySQL 提供完整的日志體系,通用查詢日志記錄所有客戶端操作,慢查詢日志聚焦性能分析。本文詳解配置方法、參數含義及生產環境最佳實踐。
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log # 或 log = /path/to/log
general_log:0 關閉 / 1 開啟general_log_file:日志文件路徑,需 MySQL 進程寫權限SET GLOBAL general_log = 1;⚠️ 生產環境禁用:高寫入場景日志量極大,嚴重影響磁盤 I/O 與性能。
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 # 超過 2 秒記錄(支持微秒:0.05)
log_queries_not_using_indexes = 1 # 記錄未使用索引的查詢
log_slow_admin_statements = 1 # 記錄管理語句(ALTER/OPTIMIZE 等)
log_slow_slave_statements = 1 # 記錄從庫慢重放
| 參數 | 建議值 | 說明 |
|---|---|---|
| long_query_time | 0.5-2 秒 | 核心業務設 0.5s,分析型設 2s |
| log_queries_not_using_indexes | ON | 發現潛在全表掃描,噪音較大需定期清理 |
| slow_query_log_file | 獨立磁盤/分區 | 避免與數據目錄爭用 I/O |
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 按耗時 Top 10
pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > digest.json
# logrotate 配置 /etc/logrotate.d/mysql
/var/log/mysql/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 mysql mysql
sharedscripts
postrotate
mysqladmin flush-logs 2>/dev/null || true
endscript
}
[mysqld]
log_error = /var/log/mysql/error.log
log_warnings = 2 # 5.7+ 對應 log_error_verbosity=3
記錄啟動/關閉、崩潰恢復、主從同步錯誤、訪問控制拒絕等關鍵事件。
| 日志類型 | 生產環境 | 開發/測試 |
|---|---|---|
| 錯誤日志 | 必開 | 必開 |
| 慢查詢日志 | 必開(long_query_time=1-2) | 必開(0.5) |
| 通用查詢日志 | 禁用 | 按需開啟 |
| Binlog | 必開(ROW 格式) | 按需 |
合理配置日志體系,是可觀測性建設的基石。生產環境「慢查詢必開、通用查詢必關」是鐵律。