編輯 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%';
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
4.2 導出 SQL 再執行(推薦,可審計)
/tmp/recovery.sql # 審計 SQL 內容後 mysql -uroot -p < /tmp/recovery.sql4.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_format | STATEMENT/ROW/MIXED | ROW(數據一致性最佳) |
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=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。
mysqlbinlog 時間/位置切片恢復,是 DBA 核心技能PURGE BINARY LOGS 安全清理,RESET MASTER 只用於初始化新主庫sync_binlog=1 + binlog_format=ROW 是生產環境黃金標準