首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 日誌檔案維護全攻略:輪轉、備份與新舊切換最佳實踐

     編輯:MySQL 資料庫相關知識

前言:日誌維護的核心價值

錯誤日誌、一般查詢日誌、慢查詢日誌、二進制日誌是資料庫故障診斷、效能分析、資料恢複的「黑盒子」。定期輪轉、備份、清理,既能避免磁碟爆滿,又能確保關鍵歷史可追溯。

一、強制啟用新日誌檔的四種方式

適用於更新日誌、一般查詢日誌、二進制日誌(MySQL 5.0+ 統稱 Binary Log)。

方式指令/操作適用版本備註
1. mysqladmin flush-logsmysqladmin -u root -p flush-logs所有版本最常用、標準做法
2. mysqladmin refreshmysqladmin -u root -p refreshMySQL 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。
  • 主從環境:清理前確認所有從庫已複刻至該 Binlog(SHOW SLAVE STATUS\G 檢查 Master_Log_File)。

四、錯誤日誌與慢查詢日誌維護

  • 錯誤日誌: 通常由 log_error 指定,系統 logrotate 自動輪轉,建議保留 90 天。
  • 慢查詢日誌: 同一般查詢日誌流程輪轉;生產環境建議導入資料庫分析表(參考文章 90973)而非純檔案留存。

五、自動化輪轉腳本範例

#!/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

六、總結清單

  1. 掌握 FLUSH LOGS / mysqladmin flush-logs 核心指令。
  2. 一般查詢日誌:重命名 → FLUSH LOGS → 壓縮備份 → 保留策略。
  3. 二進制日誌:只用 PURGE、設定 expire_logs_days、主從確認。
  4. 錯誤/慢查詢日誌:交給 logrotate 或同步導入分析庫。
  5. 寫腳本、加 crontab、驗證備份可還原,形成閉環。

結語

日誌維護看似瑣碎,實則是資料庫可靠性的基石。建立「自動輪轉、異地備份、定期驗證」三位一體機制,才能在災難發生時,擁有完整、可信的歷史證據,完成秒級診斷與恢複。

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