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

Linux MySQL Binlog 數據恢復完整實戰:從誤刪表到時間點恢復 (PITR)

     編輯:MySQL 綜合教學

Binlog 核心作用

  • 主從同步:Slave IO 線程拉取 Binlog 事件
  • 數據恢復:記錄所有 DDL/DML 操作及執行時間,支持 PITR

環境準備與 Binlog 啟用

cat /var/lib/mysql/mysql-bin.index
# mysql-bin.000001
# mysql-bin.000002  (重啟/FLUSH LOGS 產生新文件)

2. 解析最新 Binlog 定位誤操作 Position

# 僅導出 Position 2698 之前(含正常增量,排除兩次誤操作)
mysqlbinlog --stop-position=2698 /var/lib/mysql/mysql-bin.000001 > /tmp/Backup_1.sql

4. 清理環境並恢復


5. 驗證恢復結果


生產級 PITR 三種恢復策略對比

策略適用場景步驟RPO/RTO
全量備份 + Binlog 位置/時間標準場景,Binlog 完整全量導入 → Binlog 截取 → 導入RPO 秒級 / RTO 分鐘級
純 Binlog 合並恢復全量備份缺失,但 Binlog 從初始完整保留所有 Binlog 按位置/時間合並 → 導入RPO 秒級 / RTO 較長
直接全量備份恢復誤操作後數據可接受丟失,或 Binlog 損壞僅導入最近全量備份RPO 備份間隔 / RTO 最快

官方建議備份原則(睡個好覺)

  1. 安裝即開啟 log-bin,存放於獨立磁盤/RAID,確保存儲安全
  2. 定期全量備份:每日/每周 mysqldump --single-transaction --master-data=2
  3. 定期 FLUSH LOGS:mysqladmin flush-logs 切割 Binlog,便於增量備份與管理
  4. 異地備份:Binlog 與全量備份同步至異地存儲/雲對象存儲
  5. 定期演練:月度恢復演練,驗證備份可用性與流程熟練度

避坑指南

  • ❌ 恢復期間允許業務寫入 → 主鍵衝突/數據不一致 → 加鎖/停服/只讀模式
  • ❌ 直接導入含誤操作的 Binlog → 重複執行誤操作 → 必須手動/腳本剔除誤操作語句
  • ❌ 忽略 Binlog 文件編號斷層 → 遺漏增量 → 按 mysql-bin.index 列表依序處理
  • ✅ 恢復前備份當前狀態(哪怕是壞的),留存取證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved