日志是資料庫「黑盒錄音器」,掌握四大日志特性、配置與分析方法,是 DBA 故障定位、效能調優、資料恢復的基石。
| 日志類型 | 記錄內容 | 核心用途 |
|---|---|---|
| 錯誤日志 | 服務啟動/運行/停止錯誤 | 故障診斷、崩潰分析 |
| 通用查詢日志 | 客戶端連接、所有 SQL 執行 | 審計、問題重現、行為分析 |
| 二進制日志 | 所有修改資料的語句 | 主從複制、時間點恢復 (PITR) |
| 慢查詢日志 | 超時或未用索引的查詢 | 效能調優、問題 SQL 發現 |
[mysqld] log-bin = /var/log/mysql/mysql-bin # 路徑+前綴,生成 .000001 序列檔 expire_logs_days = 10 # 自動清理超過 10 天的舊日志 max_binlog_size = 100M # 單檔上限,超過自動滾動(4KB~1GB)
建議:日志與資料檔放置不同磁碟,減少 IO 競爭。
SHOW BINARY LOGS; — 列出所有 binlog 檔案mysqlbinlog binlog.000001 — 查看日志內容RESET MASTER; — 刪除所有 binlog,重新從 000001 開始(慎用)PURGE BINARY LOGS TO 'binlog.000010'; — 刪除指定檔案之前的日志PURGE BINARY LOGS BEFORE '2024-01-01'; — 刪除指定日期前的日志# 按時間範圍恢復 mysqlbinlog --start-datetime="2024-01-01 10:00:00" --stop-datetime="2024-01-01 12:00:00" binlog.000001 | mysql -u root -p # 按位置恢復(更精確) mysqlbinlog --start-position=12345 --stop-position=67890 binlog.000001 | mysql -u root -p
SET SQL_LOG_BIN = 0; -- 暫停當前會話寫入 binlog SET SQL_LOG_BIN = 1; -- 恢復
[mysqld] log-error = /var/log/mysql/error.log
SHOW VARIABLES LIKE 'log_error';tail -f 監控mysqladmin -u root -p flush-logs 重新開啟[mysqld] general_log = 1 general_log_file = /var/log/mysql/general.log
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 超過 2 秒記錄 log_queries_not_using_indexes = 1 # 記錄未用索引查詢
expire_logs_days + 定期 PURGE 雙重保障