隨著 MySQL 運行時間增長,慢查詢日誌(slow query log)會佔用大量磁盤空間,甚至影響資料庫效能。本文詳細說明如何在不重啟服務的情況下,線上輪換生成新的慢查詢日誌文件,並安全歸檔舊日誌,適用於 MySQL 5.6 及以上版本。
測試環境:MySQL 5.6.21,配置文件位於 /etc/my.cnf。編輯配置文件,新增或修改以下參數:
[mysqld] slow_query_log=1 # 開啟慢查詢日誌 slow_query_log_file=/var/lib/mysql/mysql-slow.log # 指定日誌路徑 long_query_time=0.01 # 閾值設為 0.01 秒(測試用,生產建議 1~2 秒)
修改完成後需重啟 MySQL 服務使配置生效:
service mysql restart
登入 MySQL 執行以下指令確認設定已生效:
SHOW VARIABLES LIKE '%slow_query_log%';
執行一條耗時查詢進行測試:
USE information_schema; SELECT * FROM tables;
查詢耗時 1.1 秒,返回 314 行記錄。使用 cat /var/lib/mysql/mysql-slow.log 可見日誌已記錄完整的執行資訊(時間、鎖等待、掃描行數、SQL 語句等)。
無需重啟即可切換新日誌文件,操作如下:
SET GLOBAL slow_query_log=0;
SHOW VARIABLES LIKE '%query_log%';
SET GLOBAL slow_query_log_file='/var/lib/mysql/mysql-slow_new.log';
SET GLOBAL slow_query_log=1;
SHOW VARIABLES LIKE '%query_log%';
此時資料目錄下會出現 mysql-slow_new.log,後續慢查詢將寫入新文件。舊文件 mysql-slow.log 即可安全移動歸檔(如 mv mysql-slow.log mysql-slow.log.20240120)。
全域變數修改僅在當前運行期有效,重啟後會回讀 my.cnf。為使重啟後仍使用新路徑,需同步修改配置文件:
vim /etc/my.cnf # 修改 slow_query_log_file=/var/lib/mysql/mysql-slow_new.log
重啟驗證:
service mysql restart SHOW VARIABLES LIKE '%query_log%';
logrotate 自動化管理。pt-query-digest,功能強大且免費。掌握此技巧,可有效控制磁盤佔用,持續保障資料庫穩定運行。