MySQL 多種日志各司其職,構成了故障診斷、性能調優、數據恢復、主從復制的基石。本文系統梳理五大核心日志類型的配置、查看、分析、切割實戰。
# 查看 mysqld 進程打開的日志文件 (排除數據/索引/臨時文件)
lsof -nc mysqld | grep -vE '(\.so|\.frm|\.MY[ID]|\.ibd|ib_logfile|ibdata|TCP)'
# 典型輸出:
# mysqld 26379 mysql 1w REG 8,2 10234 /data/logs/mysql/mysql_error.log # 錯誤日志
# mysqld 26379 mysql 3u REG 8,2 132 /data/logs/mysql/binarylog/mysql_bin.index # Binlog 索引
# mysqld 26379 mysql 11w REG 8,2 2618 /data/logs/mysql/slow_query.log # 慢查詢日志
# mysqld 26379 mysql 13w REG 8,2 8059 /data/logs/mysql/general_log.log # 通用查詢日志
# mysqld 26379 mysql 15w REG 8,2 425 /data/logs/mysql/binarylog/mysql_bin.000003 # Binlog 文件
[mysqld_safe]
log_error=/data/logs/mysql/mysql_error.log
[mysqld]
log_error=/data/logs/mysql/mysql_error.log
log_warnings=2 # 記錄更多警告 (如連接中斷、不安全語句)
# syslog 支持 (系統日志集中化)
# skip-syslog # 禁用 syslog,改用文件
動態修改:不支持,需重啟。
[mysqld]
general_log=ON
general_log_file=/data/logs/mysql/general_log.log
log_output=FILE # 或 TABLE (寫入 mysql.general_log 表), NONE
# 動態開關 (無需重啟)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log = 'OFF';
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
-- 遠程查詢 mysql.general_log 表,無需登錄服務器
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 100;
表結構:event_time, user_host, thread_id, server_id, command_type, argument (CSV 引擎)。
執行時間 (含等待 CPU/IO) > long_query_time (默認 10s,建議 1-2s)。
[mysqld]
slow_query_log=ON
slow_query_log_file=/data/logs/mysql/slow_query.log
long_query_time=1
log_queries_not_using_indexes=ON # 記錄未用索引的查詢 (即使很快)
log_slow_admin_statements=ON # 記錄管理命令 (ANALYZE, OPTIMIZE 等)
log_slow_slave_statements=ON # 從庫記錄慢復制 SQL
log_output=FILE
min_examined_row_limit=100 # 忽略掃描行數 < 100 的查詢
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log = 'OFF';
mysqldumpslow:官方腳本,簡單聚合。mysqlsla、myprofi、mysql-explain-slow-log 等。# Overall: 776 total, 11 UNIQUE, 0.00 QPS
# Attribute total min max avg 95% stddev median
# EXEC TIME 5657s 2s 33s 7s 23s 6s 5s
# LOCK TIME 33s 0 19s 43ms 98us 715ms 38us
# ROWS sent 323.38k 0 107.36k 427 1 6.35k 0
# Query SIZE 217.95k 38 562 288 421 81.8 285
# 重點關注: EXEC TIME 總耗時高、ROWS examined 大、Query SIZE 大的 Top SQL
| 格式 | 特點 | 優點 | 缺點 |
|---|---|---|---|
| STATEMENT | 記錄原始 SQL | Binlog 小、易讀 | 非確定性函數導致主從不一致、觸發器/存儲過程復制複雜 |
| ROW | 記錄行級變更 (前後圖) | 完全一致性、無非確定性問題、復制健壯 | Binlog 大、DDL 仍記 Statement、不易人工閱讀 |
| MIXED | 自動切換 | 折中 | 行為不可預測、調試難 |
| 文件 | 更新線程 | 關鍵信息 |
|---|---|---|
master.info | I/O 線程 | Master_Host, Master_User, Master_Log_File, Read_Master_Log_Pos, Master_Port, SSL 信息等 |
relay-log.info | SQL 線程 | Relay_Log_File, Relay_Log_Pos, Relay_Master_Log_File, Exec_Master_Log_Pos |