首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 慢查詢日志在線輪轉:不重啟服務生成新日志檔案完整操作

     編輯:MySQL 資料庫相關知識

慢查詢日志檔案隨時間增大,影響磁碟空間與分析效能。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 文本。

四、線上生成新日志檔案(核心操作)

  1. 關閉全域慢查詢:
    SET GLOBAL slow_query_log = 0;
  2. 驗證關閉:
    SHOW VARIABLES LIKE '%slow_query%';
  3. 指定新日志檔案路徑:
    SET GLOBAL slow_query_log_file = '/var/lib/mysql/mysql-slow_new.log';
  4. 重新開啟慢查詢:
    SET GLOBAL slow_query_log = 1;
  5. 驗證新檔案生效:
    SHOW VARIABLES LIKE '%slow_query%';

    檔案系統中出現 mysql-slow_new.log,後續慢查詢寫入新檔。

  6. 歸檔舊檔案:
    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,驗證路徑為新檔案。

六、輔助分析工具推薦

  • pt-query-digest (Percona Toolkit): 專業慢查詢分析,聚合相似 SQL、按總耗時/平均耗時/頻率排序、生成優化建議。
  • mysqldumpslow: 內建工具,簡易聚合統計。
  • Grafana + Prometheus + mysqld_exporter: 監控慢查詢趨勢、告警。

七、總結

慢查詢日志線上輪轉三步驟:SET GLOBAL slow_query_log=0 → SET GLOBAL slow_query_log_file='新路徑' → SET GLOBAL slow_query_log=1。務必同步更新 my.cnf 確保重啟持久化。配合 pt-query-digest 定期分析,構建「記錄 → 輪轉 → 分析 → 優化」閉環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved