錯誤日誌、一般查詢日誌、慢查詢日誌、二進制日誌是資料庫故障診斷、效能分析、資料恢複的「黑盒子」。定期輪轉、備份、清理,既能避免磁碟爆滿,又能確保關鍵歷史可追溯。
適用於更新日誌、一般查詢日誌、二進制日誌(MySQL 5.0+ 統稱 Binary Log)。
| 方式 | 指令/操作 | 適用版本 | 備註 |
|---|---|---|---|
| 1. mysqladmin flush-logs | mysqladmin -u root -p flush-logs | 所有版本 | 最常用、標準做法 |
| 2. mysqladmin refresh | mysqladmin -u root -p refresh | MySQL 3.21 或更早 | 舊版相容指令 |
| 3. SQL 指令 | FLUSH LOGS; | 所有版本 | 可寫入腳本/排程 |
| 4. 重啟服務 | systemctl restart mysql | 所有版本 | 影響業務,非首選 |
mysql-bin),新檔名序號遞增(mysql-bin.000001 → mysql-bin.000002)。.index 索引檔。# 1. 進入資料目錄
cd /var/lib/mysql # 或 SHOW VARIABLES LIKE 'datadir';
# 2. 重命名舊日誌
mv mysql.log mysql.log.20240115
# 3. 通知服務重新開啟日誌(不中斷服務)
mysqladmin -u root -p flush-logs
# 或 FLUSH LOGS;
# 4. 壓縮備份舊日誌
gzip mysql.log.20240115
# 移至備份儲存區
mv mysql.log.20240115.gz /backup/logs/
# 5. 設定保留策略(例:保留 30 天)
find /backup/logs -name 'mysql.log.*.gz' -mtime +30 -delete
PURGE BINARY LOGS TO 'mysql-bin.000123'; 或 PURGE BINARY LOGS BEFORE '2024-01-01'; 讓主從同步協調。expire_logs_days = 7(my.cnf),自動清理超期 Binlog。SHOW SLAVE STATUS\G 檢查 Master_Log_File)。log_error 指定,系統 logrotate 自動輪轉,建議保留 90 天。#!/bin/bash
# /usr/local/bin/mysql-log-rotate.sh
# 每日 00:05 由 cron 執行
DATADIR="/var/lib/mysql"
BACKUPDIR="/backup/mysql-logs/$(date +%Y%m)"
mkdir -p "$BACKUPDIR"
cd "$DATADIR"
for LOG in mysql.log mysql-slow.log; do
[ -f "$LOG" ] || continue
mv "$LOG" "$LOG.$(date +%Y%m%d)"
mysqladmin -u root -p"${MYSQL_PWD}" flush-logs
gzip "$LOG.$(date +%Y%m%d)"
mv "$LOG.$(date +%Y%m%d).gz" "$BACKUPDIR/"
done
# 清理 30 天前備份
find "$BACKUPDIR/../" -name '*.gz' -mtime +30 -delete
FLUSH LOGS / mysqladmin flush-logs 核心指令。expire_logs_days、主從確認。日誌維護看似瑣碎,實則是資料庫可靠性的基石。建立「自動輪轉、異地備份、定期驗證」三位一體機制,才能在災難發生時,擁有完整、可信的歷史證據,完成秒級診斷與恢複。