[mysqld]
log-bin = /data/mysql/binlog/mysql-bin # 建議獨立磁盤
max_binlog_size = 500M # 單文件上限,超過自動切換
expire_logs_days = 7 # 自動清理天數
sync_binlog = 1 # 每次提交強制刷盤,最安全但最慢
文件命名規則:mysql-bin.000001、mysql-bin.000002... 伴隨 mysql-bin.index 索引文件。
FLUSH LOGS 手動切換max_binlog_sizemysqladmin flush-logs# 查看指定文件
mysqlbinlog --base64-output=decode-rows -v /data/mysql/binlog/mysql-bin.000001
# 導出 SQL 文件
mysqlbinlog /data/mysql/binlog/mysql-bin.000001 > /tmp/binlog.sql
# 指定時間範圍導出
mysqlbinlog --start-datetime="2024-01-15 10:00:00" --stop-datetime="2024-01-15 12:00:00" \
/data/mysql/binlog/mysql-bin.000001 > /tmp/incr.sql
-- 按文件名清理(保留指定文件及之後)
PURGE BINARY LOGS TO 'mysql-bin.000010';
-- 按時間清理(保留指定時間之後)
PURGE BINARY LOGS BEFORE '2024-01-15 00:00:00';
-- 核彈級:重置所有 Binlog(慎用!主從環境會中斷復制)
RESET MASTER;
黃金法則:清理前確認所有從庫已同步至目標位置(SHOW SLAVE STATUS\G 查看 Relay_Master_Log_File)。
binlog-do-db = business_db -- 僅記錄此庫
binlog-ignore-db = test,sys -- 排除此庫
# 注意:需在 SQL 前執行 USE db_name,否則不生效
| 配置 | 含義 | 風險 |
|---|---|---|
| sync_binlog = 0 | 依賴 OS 刷盤(默認) | 崩潰丟失最後事務 |
| sync_binlog = 1 | 每次提交 fsync | 最安全,IOPS 壓力大 |
| sync_binlog = N | 每 N 次提交 fsync | 折中方案 |
InnoDB + sync_binlog=1 + innodb_flush_log_at_trx_commit=1 = 雙 1 模式,最高可靠性。
The binary log ... is shorter than expected,需從主庫全量重建從庫PURGE BINARY LOGS BEFORE ... 或擴容磁盤Seconds_Behind_Master,優化從庫 SQL 線程、啟用並行復制掌握 Binlog 全生命周期管理,是 MySQL 高可用架構的基石。