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

MySQL Binary Log 完整操作指南:啟用、查看、恢復與核心參數調優

     編輯:MySQL 綜合教學

一、Binlog 核心作用

  1. 數據恢復:基於時間點或位置的 Point-in-Time Recovery (PITR)
  2. 主從複制:Slave 重放 Master 的 Binlog 事件實現同步

二、啟用 Binlog

編輯 my.cnf [mysqld]:

log_bin = mysql_bin          # 基礎文件名,自動生成 mysql_bin.000001, .000002...
server_id = 1                # 複制拓撲唯一標識(主從必須不同)
binlog_format = ROW          # 推薦 ROW 格式(5.7.7+ 預設),兼容性最好
expire_logs_days = 7         # 自動清理過期日誌
max_binlog_size = 1G         # 單文件最大值,達到時自動輪換

重啟驗證:

SHOW VARIABLES LIKE '%log_bin%';

三、查看 Binlog 內容的兩種方式

3.1 SQL 方式:SHOW BINLOG EVENTS

# 查看完整文件
mysqlbinlog /var/lib/mysql/mysql_bin.000001

# 指定時間範圍
mysqlbinlog --start-datetime="2024-01-20 10:00:00" \
            --stop-datetime="2024-01-20 11:00:00" \
            /var/lib/mysql/mysql_bin.000001

# 指定位置範圍
mysqlbinlog --start-position=100 --stop-position=500 \
            /var/lib/mysql/mysql_bin.000001

# 導出 SQL 文件供審計/恢復
mysqlbinlog --start-datetime="..." --stop-datetime="..." \
            /var/lib/mysql/mysql_bin.000001 > /tmp/recovery.sql

四、基於 Binlog 的數據恢復實戰

4.1 直接管道恢復


4.2 導出 SQL 再執行(推薦,可審計)

 /tmp/recovery.sql
# 審計 SQL 內容後
mysql -uroot -p < /tmp/recovery.sql

4.3 按位置精確恢復

  命令作用備註
  SHOW MASTER STATUS查看當前 Binlog 文件與位置備份前記錄位置
  FLUSH LOGS切換新 Binlog 文件備份後執行,便於增量備份
  RESET MASTER清空所有 Binlog,重置索引慎用!會破壞主從複制
  PURGE BINARY LOGS TO 'mysql_bin.000010'刪除指定文件之前的 Binlog安全清理,不影響當前複制
  PURGE BINARY LOGS BEFORE '2024-01-15'刪除指定日期前的 Binlog按時間清理


六、核心配置參數詳解

參數說明建議值
log_bin啟用 Binlog,指定基礎路徑/名稱/var/lib/mysql/mysql_bin
binlog_formatSTATEMENT/ROW/MIXEDROW(數據一致性最佳)
max_binlog_size單文件上限(達到時輪換,事務不拆分)1G
expire_logs_days自動清理天數(0=不自動清理)7~30 天視磁盤而定
binlog_cache_size事務 Binlog 記憶體緩存32M~128M(大事務調大)
max_binlog_cache_size事務 Binlog 最大緩存1G
sync_binlog提交時 fsync 頻率1(最安全),0=最高性能
binlog_do_db只記錄指定庫(慎用,複制過濾建議用 replicate-do-db)通常不設
binlog_ignore_db忽略指定庫通常不設

七、sync_binlog 權衡決策

  • sync_binlog=0:OS 決定何時刷盤,性能最好,崩潰丟失 OS cache 中數據
  • sync_binlog=1:每次提交 fsync,**零數據丟失**(配合電池備援 RAID 卡性能損耗可控)
  • sync_binlog=N:折中,每 N 次提交 fsync

**生產環境強制建議 sync_binlog=1**,搭配 innodb_flush_log_at_trx_commit=1 實現「雙 1」配置,保證 ACID。

八、總結

  1. Binlog 是 MySQL 數據安全與複制的基石,必須啟用並合理配置保留策略
  2. 掌握 mysqlbinlog 時間/位置切片恢復,是 DBA 核心技能
  3. PURGE BINARY LOGS 安全清理,RESET MASTER 只用於初始化新主庫
  4. sync_binlog=1 + binlog_format=ROW 是生產環境黃金標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved