log-bin)mysqlbinlog 工具(MySQL 內建)# 方法 1:MySQL 客戶端
mysql> SHOW BINLOG EVENTS\G
# 方法 2:命令列
mysql --user=root -p -e 'SHOW BINLOG EVENTS\G'
適用 MySQL 4.1.4+,使用 --start-date、--stop-date(格式:YYYY-MM-DD HH:MM:SS)。
# 1. 先恢復昨晚完整備份
# 2. 重放 09:59:59 前的 binlog
mysqlbinlog --stop-date="2005-04-20 09:59:59" /var/log/mysql/bin.123456 | mysql -u root -p
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -p
組合:完整備份 + 兩段 binlog 重放 = 恢復至誤操作前一秒。
使用 --start-position、--stop-position,避免同秒內多事務時間戳衝突。
mysqlbinlog --start-date="2005-04-20 09:55:00" --stop-date="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
用文字編輯器開啟 /tmp/mysql_restore.sql,搜尋錯誤 SQL(如 DROP TABLE),記錄其 log_pos 值(如 368312)。
# 恢復至錯誤事務之前
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 | mysql -u root -p
# 跳過錯誤事務,恢復後續操作
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 | mysql -u root -p
注意:mysqlbinlog輸出包含SET TIMESTAMP,恢復後的資料與日誌會保留原始執行時間。
GTID(MySQL 5.6+)簡化位置管理