MySQL 啟用二進位日誌(--log-bin),可透過 mysqlbinlog 工具從指定時間點(如上次備份)恢復至今或另一時間點。
my.cnf/my.ini 中 log-bin 路徑。SHOW BINLOG EVENTS \G 獲取當前檔案名。使用 --start-date 與 --stop-date(格式 YYYY-MM-DD HH:MM:SS)。
# 1. 還原前一晚完整備份
# 2. 重放 Binlog 至誤操作前一秒
mysqlbinlog --stop-date="2005-04-20 09:59:59" /var/log/mysql/bin.123456 | mysql -u root -pmypwd
# 3. 若數小時後發現錯誤,需重放誤操作後的正常交易
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -pmypwd
結合完整備份 + 兩段 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
DROP TABLE),記錄其 log_pos 位置號。# 恢復至錯誤位置前
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 | mysql -u root -pmypwd
# 跳過錯誤,恢復後續正常交易
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 | mysql -u root -pmypwd
注意:mysqlbinlog 輸出含 SET TIMESTAMP,恢復資料會保留原始執行時間戳記。