【問題發生】
某個系統,不小心在界面上誤刪除了數據,查數據庫確認對應的數據已經從數據庫中刪掉。
檢查 mysql 設置,binlog 缺省開啓,對應時間的binlog文件保存完整,可以用來恢復數據。
【數據庫層的數據恢復】
利用 mysqldump --no-data 建立鏡像的數據庫環境,作爲驗證工作的環境。
使用 mysqlbinlog logfile databasename > logfile.sql 將binlog文件中的二進制內容轉化爲sql文本。
觀察sql文本,並利用已知主鍵搜索,查到相關的 INSERT/UPDATE 記錄。不過我很疑惑沒有查到對應的 DELETE記錄。
在驗證數據庫環境中手動執行查到的INSERT、UPDATE記錄,在數據庫中確認數據基本完好。
【應用層驗證】
整理手動執行的記錄,在真實環境中再次執行手動執行,在應用系統中確認數據基本完好。
【經驗和教訓】
1)手動恢復數據耗時耗力,需要同時對數據庫實現和應用層都很熟悉,這是最後的手段,能不用就不用;
2)能夠查看到binlog 文件保存完整,就可以認爲數據可以恢復,只是恢復的完整程度需要繼續確認。
3)必須在鏡像環境中工作,工作驗證無誤以後,將在鏡像環境中的操作嚴格複製到實際工作環境中。
4)在我的例子中,因爲記錄條目數較少(<50條),手動恢復的方式較爲適合。
5)實際我的工作中優先嚐試基於腳本的自動恢復,先後遇到數據庫表格式有變化、字符集問題、特殊字符問題,反而耽誤了時間。
應該僅對數據量較大(>500條)的情況做自動恢復。
6)數據庫層的數據恢復後,還需要做應用層的驗證才能最終確認恢復成功。
從 mysql binlog 中手動恢復數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
目前關於字符編碼的認識(跨平臺、多語言?)
_purehol
2019-09-02 21:36:46
關於C++中指向類的指針
_purehol
2019-04-24 01:04:40
.net framework版本衝突問題 >LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: 文件無效或損壞
_purehol
2019-04-24 01:04:40
[工程經驗] C++在工程中最常用的三個知識
Robot_Starscream
2018-11-20 05:17:35
[工程經驗] 軟硬件的架構分析
Robot_Starscream
2018-11-20 05:17:35
[工程經驗] 實現一個算法的思想
Robot_Starscream
2018-11-20 05:17:35
某網點出口區域冗餘線路設計
執着追求
2018-09-12 04:08:48
銳捷交換機升級操作系統
執着追求
2018-09-12 04:08:48
爲什麼快速排序在數組的情況下比歸併排序快
CS_ChenLI
2018-09-03 15:18:06
花生殼的dns服務器
iteye_17506
2018-09-02 10:37:22
我在Windows下常用的命令行
iteye_17506
2018-09-02 10:37:21
[雜記]ntp 時間同步
iteye_17506
2018-09-02 10:37:21
Tomcat 中會話超時的相關配置
iteye_17506
2018-09-02 10:37:18