首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 慢查詢日誌文件線上輪轉與歸檔實戰 (無需重啟)

     編輯:MySQL 綜合教學

場景:慢查詢日誌過大,需線上切換新文件

傳統做法 mv slow.log slow.log.bak; mysqladmin flush-logs 需重啟或發送信號。MySQL 5.1+ 支援**全域變數動態修改**,實現無重啟輪轉。

操作步驟

# 1. 關閉全域慢查詢日誌
SET GLOBAL slow_query_log = 0;
SHOW VARIABLES LIKE '%query_log%';  -- 確認 OFF

# 2. 設定新日誌文件路徑
SET GLOBAL slow_query_log_file = '/var/lib/mysql/mysql-slow_new.log';

# 3. 重新開啟慢查詢日誌
SET GLOBAL slow_query_log = 1;
SHOW VARIABLES LIKE '%query_log%';  -- 確認 ON,File 已變更

# 4. 歸檔舊文件
mv /var/lib/mysql/mysql-slow.log /var/lib/mysql/mysql-slow_$(date +%F).log

持久化配置 (重啟後生效)

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow_new.log
long_query_time = 0.01
min_examined_row_limit = 1000
log_output = FILE

**注意**:動態修改 slow_query_log_file 重啟後會回退至 my.cnf 設定值,**必須同步修改 my.cnf** 才能永久生效。

驗證與測試

# 測試慢查詢
USE information_schema;
SELECT * FROM tables;  -- 耗時 1.1s,超過 0.01s 閾值

# 查看新日誌
cat /var/lib/mysql/mysql-slow_new.log
# 應包含 Time、User、Query_time、Lock_time、Rows_sent、Rows_examined、SQL 文本

線上修改慢查詢參數速查

參數動態修改說明
slow_query_logSET GLOBAL slow_query_log=1/0開關
long_query_timeSET GLOBAL long_query_time=0.5閾值 (秒),支援微秒
min_examined_row_limitSET GLOBAL min_examined_row_limit=1000忽略掃描行少的查詢
log_queries_not_using_indexesSET GLOBAL log_queries_not_using_indexes=1記錄未用索引查詢 (慎開)

工具推薦:percona-toolkit pt-query-digest

pt-query-digest /var/lib/mysql/mysql-slow_new.log --limit 20 --output json > report.json

專業分析、聚合、排序、報表生成,運維必備。

掌握線上輪轉,慢查詢日誌管理不再需停機維護窗口。

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