MySQL 資料庫增量資料恢復案例

fullstackyang發表於2016-09-11

一、場景概述

  1. MySQL資料庫每日零點自動全備
  2. 某天上午10點,小明莫名其妙地drop了一個資料庫
  3. 我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復

二、主要思想

  1. 利用全備的sql檔案中記錄的CHANGE MASTER語句,binlog檔案及其位置點資訊,找出binlog檔案增量的部分
  2. 用mysqlbinlog命令將上述的binlog檔案匯出為sql檔案,並剔除其中的drop語句
  3. 通過全備檔案和增量binlog檔案的匯出sql檔案,就可以恢復到完整的資料

三、過程示意圖

QQ截圖20160802163433

四、操作過程

1. 模擬資料

2. 全備命令

3. 繼續插入資料

此時,全備之後到誤操作時刻之間,使用者寫入的資料在binlog中,需要恢復出來

4.檢視全備之後新增的binlog檔案

這是全備時刻的binlog檔案位置,即mysql-bin.000003的107行,因此在該檔案之前的binlog檔案中的資料都已經包含在這個全備的sql檔案中了

5. 移動binlog檔案,並讀取sql,剔除其中的drop語句

在恢復全備資料之前必須將該binlog檔案移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復資料部分變得比較混亂

6. 恢復資料

五、小結

  • 適合人為SQL語句造成的誤操作或者沒有主從複製等的熱備情況當機時的修復
  • 恢復條件要全備和增量的所有資料
  • 恢復時建議對外停止更新,即禁止更新資料庫
  • 先恢復全量,然後把全備時刻點以後的增量日誌,按順序恢復成SQL檔案,然後把檔案中有問題的SQL語句刪除(也可通過時間和位置點),再恢復到資料庫

相關文章