首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux 下 MySQL 二進位日誌(Binlog)時間點恢復完整操作指南

     編輯:MySQL 綜合教學

前置條件

MySQL 啟用二進位日誌(--log-bin),可透過 mysqlbinlog 工具從指定時間點(如上次備份)恢復至今或另一時間點。

確認 Binlog 檔案位置

  • 查閱 my.cnf/my.ini 中 log-bin 路徑。
  • 或執行 SHOW BINLOG EVENTS \G 獲取當前檔案名。

方法一:按時間點恢復(MySQL 4.1.4+)

使用 --start-date 與 --stop-date(格式 YYYY-MM-DD HH:MM:SS)。

案例:誤刪大表於 10:00,欲恢復至 09:59:59

# 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,適用於同一秒內發生多筆破壞性交易。

操作步驟

  1. 匯出可疑時段 Binlog 至文字檔供人工檢視:
    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
  2. 用文字編輯器搜尋錯誤 SQL(如 DROP TABLE),記錄其 log_pos 位置號。
  3. 分段重放:
    # 恢復至錯誤位置前
    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,恢復資料會保留原始執行時間戳記。

相關延伸閱讀

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved