首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL日誌文件維護實戰:FLUSH LOGS、二進制日誌輪轉與常規日誌備份策略

     編輯:MySQL 綜合教學

日誌是資料庫恢復、審計、複寫的核心依據。本文系統講解MySQL日誌維護核心操作:FLUSH LOGS強制輪轉、更新日誌/常規日誌/二進制日誌的備份清理流程、SQL與命令行雙模式操作。

日誌類型與作用速覽

強制日誌輪轉:FLUSH LOGS

三種等效觸發方式:

1. 命令行 mysqladmin

mysqladmin -u root -p flush-logs
mysqladmin -u root -p refresh  # 舊版本相容

2. SQL 命令

FLUSH LOGS;

3. 重啟服務

systemctl restart mysqld

輪轉效果:

  • 關閉並重新打開所有日誌文件
  • 二進制日誌:序號遞增(binlog.000001 → binlog.000002)
  • 常規/錯誤/慢查詢日誌:重新創建文件(舊文件需手動備份/清理)

常規日誌備份與清理標準流程

cd /var/lib/mysql
mv mysql.log mysql.log.$(date +%Y%m%d)
mysqladmin -u root -p flush-logs
# 此時產生新的 mysql.log
# 壓縮備份舊日誌
gzip mysql.log.$(date +%Y%m%d)
# 移至備份存儲或異地同步

二進制日誌管理最佳實踐

1. 自動過期清理(推薦)

[mysqld]
expire_logs_days = 7  # 自動清理7天前binlog

2. 手動清理(謹慎)

-- 清理指定文件前的所有binlog
PURGE MASTER LOGS TO 'binlog.000010';

-- 清理指定日期前的所有binlog
PURGE MASTER LOGS BEFORE '2024-01-01 00:00:00';

⚠️ 清理前必須確認:所有從庫已同步至該位點(SHOW SLAVE STATUS的Master_Log_File/Read_Master_Log_Pos)

3. 空間不足緊急處理

  1. 檢查df -h確認磁碟壓力
  2. 臨時關閉binlog:SET GLOBAL SQL_LOG_BIN=0;(僅當前會話)
  3. 清理已同步舊binlog
  4. 恢複SET GLOBAL SQL_LOG_BIN=1;

慢查詢日誌輪轉

mv slow.log slow.log.$(date +%Y%m%d)
mysqladmin -u root -p flush-logs
# 分析舊日誌:pt-query-digest slow.log.20240115 > report.txt

日誌維護自動化腳本範例

#!/bin/bash
# log_rotate.sh - 每日logrotate或cron執行

LOG_DIR="/var/lib/mysql"
BACKUP_DIR="/backup/mysql_logs"
DATE=$(date +%Y%m%d)

mkdir -p "$BACKUP_DIR"

# 二進制日誌不在此處理(由expire_logs_days自動管理)

# 常規日誌
if [ -f "$LOG_DIR/mysql.log" ]; then
    mv "$LOG_DIR/mysql.log" "$BACKUP_DIR/mysql.log.$DATE"
    mysqladmin -u root -p"$MYSQL_ROOT_PASS" flush-logs
    gzip "$BACKUP_DIR/mysql.log.$DATE"
fi

# 慢查詢日誌
if [ -f "$LOG_DIR/slow.log" ]; then
    mv "$LOG_DIR/slow.log" "$BACKUP_DIR/slow.log.$DATE"
    mysqladmin -u root -p"$MYSQL_ROOT_PASS" flush-logs
    gzip "$BACKUP_DIR/slow.log.$DATE"
    # 可選:生成分析報告
    # pt-query-digest "$BACKUP_DIR/slow.log.$DATE.gz" > "$BACKUP_DIR/slow_report.$DATE.txt"
fi

# 清理30天前備份
find "$BACKUP_DIR" -name "*.gz" -mtime +30 -delete

關鍵監控指標

  • SHOW MASTER LOGS:binlog文件列表與大小
  • SHOW BINLOG EVENTS IN 'binlog.000010' LIMIT 10:檢視事件內容
  • SHOW SLAVE STATUS:從庫同步位點,清理binlog前必查
  • 磁碟使用率告警閾值:80%

建立「自動輪轉→壓縮備份→異地同步→定期清理→監控告警」閉環,確保日誌既可用於恢復審計,又不佔用過多存儲資源。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
日誌類型用途檔案特徵
錯誤日誌啟動/關閉/錯誤/警告hostname.err,不可關閉
常規日誌所有連接/查詢/操作mysql.log,量大需輪轉
更新日誌修改數據的語句(已棄用)mysql-bin.000001,5.1+改為二進制日誌
二進制日誌複寫/時間點恢復/審計binlog.000001,核心日誌
慢查詢日誌超時SQL分析slow.log,調優依據
中繼日誌從庫接收的主庫binlogrelay-bin.000001,從庫專用