從 mysql binlog 中手動恢復數據

【問題發生】
某個系統,不小心在界面上誤刪除了數據,查數據庫確認對應的數據已經從數據庫中刪掉。
檢查 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)數據庫層的數據恢復後,還需要做應用層的驗證才能最終確認恢復成功。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章