配置檔啟用(永久生效)
[mysqld]
# 通用查詢日誌(記錄所有 SQL,高負載慎用)
general_log = 1
general_log_file = /var/log/mysql/general.log
# 慢查詢日誌(核心調優依據)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 秒,建議 0.5~1
log_queries_not_using_indexes = 1
log_output = FILE # 或 TABLE (mysql.slow_log)
log_slow_admin_statements = 1
log_slow_slave_statements = 1
線上動態開關(無需重啟)
-- 開啟
SET GLOBAL general_log = ON;
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 0.5;
-- 關閉
SET GLOBAL general_log = OFF;
SET GLOBAL slow_query_log = OFF;
-- 查看狀態
SHOW VARIABLES LIKE '%log%';
日誌分析工具鏈
| 工具 | 用途 | 安裝 |
| mysqldumpslow | 官方內建,彙總慢查詢 | MySQL 附屬 |
| pt-query-digest | Percona Toolkit,深度分析 | yum install percona-toolkit |
| mysqlsla | 統計分析,輸出報表 | CPAN/源碼 |
| go-mysql-slowlog | Go 寫入,高效能解析 | GitHub Release |
mysqldumpslow 實用範例
# Top 10 耗時查詢
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# Top 10 掃描行數
mysqldumpslow -s r -t 10 /var/log/mysql/slow.log
# 含特定表
mysqldumpslow -s t "/var/log/mysql/slow.log" | grep users
pt-query-digest 黃金組合
# 產生詳細報表
pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > report.json
# 即時監控(類 tail -f)
pt-query-digest --processlist h=localhost,u=root,p=pass --interval 1 --run-time 300
效能影響與輪轉策略
| 日誌類型 | IO 影響 | 建議保留 | 輪轉 |
| General Log | 極大(全量 SQL) | 僅除錯時短暫開啟 | logrotate daily, size 100M |
| Slow Log | 極小(僅慢查詢) | 長期開啟,保留 30 天 | logrotate daily, compress |
| Binary Log | 中等 | 依備份策略 | expire_logs_days=7 |
logrotate 範例
/var/log/mysql/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 mysql adm
sharedscripts
postrotate
mysqladmin flush-logs > /dev/null 2>&1 || true
endscript
}
- 上一篇文章: Windows 下 MySQL 備份還原完整操作指南:mysqldump、mysqladmin 與命令列實戰
- 下一篇文章: MySQL 遞歸樹形查詢實戰:存儲過程 + 臨時表 + 游標實現無限級分類
Copyright ©
程式碼之家 All Rights Reserved