慢查詢日志檔案隨時間增大,影響磁碟空間與分析效能。MySQL 支援線上切換日志檔案,無需重啟服務。本文記錄完整操作步驟:配置啟用、驗證生效、測試寫入、線上切換新檔案、舊檔歸檔、重啟後持久化配置。
修改 /etc/my.cnf:
[mysqld] slow_query_log = 1 slow_query_log_file = /var/lib/mysql/mysql-slow.log long_query_time = 0.01 # 秒,測試用極小值
重啟 MySQL:systemctl restart mysqld。
SHOW VARIABLES LIKE '%slow_query%';
確認 slow_query_log = ON、路徑正確。
USE information_schema; SELECT * FROM tables; -- 耗時 > 0.01s,觸發記錄
查看日志:
cat /var/lib/mysql/mysql-slow.log
記錄格式:Time: 開頭,含用戶、執行時間、鎖時間、掃描/返回行數、SQL 文本。
SET GLOBAL slow_query_log = 0;
SHOW VARIABLES LIKE '%slow_query%';
SET GLOBAL slow_query_log_file = '/var/lib/mysql/mysql-slow_new.log';
SET GLOBAL slow_query_log = 1;
SHOW VARIABLES LIKE '%slow_query%';
檔案系統中出現 mysql-slow_new.log,後續慢查詢寫入新檔。
mv /var/lib/mysql/mysql-slow.log /var/lib/mysql/archive/mysql-slow-$(date +%F).log
問題: SET GLOBAL 僅運行時生效,重啟後恢復 my.cnf 設定。
解決: 同步修改 my.cnf:
slow_query_log_file = /var/lib/mysql/mysql-slow_new.log
再重啟:systemctl restart mysqld,驗證路徑為新檔案。
慢查詢日志線上輪轉三步驟:SET GLOBAL slow_query_log=0 → SET GLOBAL slow_query_log_file='新路徑' → SET GLOBAL slow_query_log=1。務必同步更新 my.cnf 確保重啟持久化。配合 pt-query-digest 定期分析,構建「記錄 → 輪轉 → 分析 → 優化」閉環。