[mysqld]
log-bin = mysql-bin # 基礎名稱,自動生成 mysql-bin.000001...
binlog_format = ROW # 推薦 ROW 格式,避免主從不一致
expire_logs_days = 7 # 自動清理 7 天前日志
max_binlog_size = 100M # 單文件最大 100M 自動切換
重啟服務生效。查看狀態:SHOW BINARY LOGS; / SHOW MASTER STATUS\G
mysqladmin flush-logs / FLUSH LOGSmysqladmin refreshmax_binlog_size注意:若 log-bin=mysql-bin.log 帶擴展名,輪轉會截斷覆蓋同名文件,導致數據丟失,生產環境嚴禁帶擴展名。
WHERE 無匹配行的 UPDATE/DELETE 不記錄SET col = col 這類無實際變更的 UPDATE 不記錄mysqlbinlog /var/lib/mysql/mysql-bin.000001 | mysql -u root -p
# 或按時間點恢復
mysqlbinlog --stop-datetime="2024-01-15 10:00:00" mysql-bin.* | mysql -u root -p
mysqlbinlog --database=target_db mysql-bin.* | mysql -u root -p target_db
# 正確順序:ls -t -r 按修改時間升序
ls -t -r /var/lib/mysql/mysql-bin.* | xargs cat | mysql --one-database target_db -u root -p
⚠️ 若手動修改過日志文件 mtime,順序會亂,請用
ls -1按文件名排序
# 1. 定位誤操作位置
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000005 | grep -n -B5 -A5 "DROP TABLE"
# 2. 重放至誤操作前
mysqlbinlog --stop-position=12345 mysql-bin.000005 | mysql -u root -p
[mysqld]
server-id = 2
relay-log = relay-bin
read-only = 1
replicate-do-db = business_db # 僅同步指定庫
replicate-ignore-db = mysql,test
Seconds_Behind_Master > 300 秒告警SHOW SLAVE STATUS\G 中 Slave_IO_Running、Slave_SQL_Running 均為 Yes