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

MySQL 日誌檔案維護全攻略:一般日誌、更新日誌、輪轉策略與自動化腳本

     編輯:MySQL 資料庫相關知識

兩大日誌類型

日誌啟動選項內容用途
一般日誌--log 或 --general-log連線、查詢、各類事件審計、問題追蹤、行為分析
更新日誌--log-update (舊版)
--log-bin (二進位日誌,現代標準)
修改資料的 SQL (DELETE/INSERT/UPDATE/DDL/GRANT...)時間點恢復 (PITR)、主從複制、稽核

建議**同時啟用兩者**,熟悉後可僅保留二進位日誌節省空間。

日誌輪轉機制

一般日誌 / 固定名稱更新日誌

命名模式:log → log.0 → log.1 ... 輪轉時重命名,最舊者刪除。

輪轉腳本範例 (一般日誌)

#!/bin/sh
LOG_DIR=/var/lib/mysql
LOG_BASE=mysql.log
KEEP_DAYS=7

cd $LOG_DIR
# 輪轉
mv -f $LOG_BASE.$KEEP_DAYS $LOG_BASE.$((KEEP_DAYS+1)) 2>/dev/null || true
for i in $(seq $KEEP_DAYS -1 1); do
    mv -f $LOG_BASE.$((i-1)) $LOG_BASE.$i 2>/dev/null || true
done
mv -f $LOG_BASE $LOG_BASE.0
# 通知 Server 重新開啟日誌
mysqladmin -u root -p flush-logs

二進位日誌 (自動序列命名)

命名:binlog.000001, binlog.000002...
Server 啟動、FLUSH LOGS、達到 max_binlog_size 時自動產生新檔。

基於時間清理腳本

#!/bin/sh
LOG_DIR=/var/lib/mysql
KEEP_DAYS=7
find $LOG_DIR -name 'binlog.[0-9]*' -mtime +$KEEP_DAYS -delete

或直接設定 expire_logs_days=7 讓 Server 自動清理。

LOAD DATA 與更新日誌的注意事項

  • LOAD DATA INFILE 僅記錄 SQL 語句本身,**不記錄載入的資料行內容**。
  • 恢復時**必須保留原始資料檔**,否則重放日誌無法還原資料。
  • 備份策略:全量備份 + 二進位日誌 + 原始載入檔案備份。

系統備份建議

  • 二進位日誌寫入**不同磁碟/掛載點** (如 --log-bin=/mnt/binlog/binlog),避免資料磁碟損壞連帶日誌遺失。
  • 定期檔案系統層面備份 (快照/rsync/雲端備份) 包含資料目錄與日誌目錄。

自動化排程

# crontab -e (mysql 用戶)
# 每天 04:00 輪轉一般日誌
0 4 * * * /usr/local/mysql/bin/rotate-logs.sh
# 每天 04:05 清理舊二進位日誌
5 4 * * * /usr/local/mysql/bin/purge-binlogs.sh

Linux 建議使用 logrotate 管理,MySQL 分發包含 mysql-log-rotate 範例設定。

固定名稱更新日誌 (舊版相容)

啟動指定 --log-update=update.log (含副檔名),Server 收到 FLUSH LOGS 時關閉重開同名檔,**不產生序列檔**,輪轉腳本同一般日誌。

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