SHOW PROCESSLIST 只能捕捉長時間運行的查詢,對毫秒級語句「拼不過手速」。通用查詢日志(General Query Log)記錄所有客戶端連接與執行的語句,是審計、排查的完整記錄。
/etc/my.cnf(Windows 為 my.ini),在 [mysqld] 區段添加:
log = /var/log/mysql/mysql.log
注意: 日志路徑需具備 MySQL 進程寫入權限,避免放在 /home 等受限目錄。
service mysqld restart# 實時跟蹤
tail -f /var/log/mysql/mysql.log
# 下載離線分析
scp user@host:/var/log/mysql/mysql.log ./
⚠️ 生產環境警示: 通用日志記錄所有語句,高並發下日志增長極快,會佔用大量磁盤 IO 與空間。建議僅在排查期短期開啟,平時保持關閉。
慢查詢日志僅記錄執行時間超過閾值或未使用索引的查詢,體積小、價值高,適合長期開啟。
[mysqld]
# 慢查詢日志路徑
log-slow-queries = /var/lib/mysql/slowquery.log
# 閾值:超過 5 秒記錄(單位:秒)
long_query_time = 5
# 記錄未使用索引的查詢
log-queries-not-using-indexes
| 參數 | 作用 | 建議值 |
|---|---|---|
log-slow-queries | 日志文件路徑 | 獨立分區,避免影響主庫 IO |
long_query_time | 慢查詢閾值 | 生產環境 1~2 秒;開發環境 0.5 秒 |
log-queries-not-using-indexes | 記錄全表掃描 | 開啟,發現隱性慢查詢 |
log-slow-admin-statements | 記錄管理命令 | 可選開啟 |
min_examined_row_limit | 最小掃描行數閾值 | 1000,過濾微小表誤報 |
mysqldumpslow -s t -t 10 /var/lib/mysql/slowquery.log
pt-query-digest /var/lib/mysql/slowquery.log > slow_report.txt
sys.schema_table_statistics、sys.statement_analysis 等視圖直接查詢long_query_time=1,配合 log_queries_not_using_indexes=ONlogrotate 定期壓縮、清理舊日志,防止磁盤爆滿pt-query-digest,建立慢查詢治理清單