1. 程式人生 > >記錄一下誤刪除了mysql表中的資料後的恢復過程

記錄一下誤刪除了mysql表中的資料後的恢復過程

用navicat刪除資料庫中的入侵資料,導致刪順手了,把一些看似重複資料的重要資料在表中直接右鍵刪除掉了(相當於delete from table命令),而該資料庫沒有做過這些資料的備份,同時沒有開啟二進位制日誌,常規的恢復方法徹底走入死路。

在解決的過程中,做過以下幾種嘗試:

1.瞭解到如果開啟了日誌,直接mysqlbinlog 使用日誌恢復即可。

2.如果不是刪除了一個表的部分資料,而是刪除整個表,那麼可以在刪除後馬上用磁碟資料恢復軟體嘗試恢復。(因為刪除表後會有檔案被刪除,而刪除表的部分資料,檔案還是存在)

3.找資料恢復的公司,該公司號稱用ibdata1就能恢復,於是我使用工具分析ibdata1(分析過程參考http://www.cnblogs.com/gomysql/p/3586822.html),一頁一頁檢視有沒有歷史記錄存在,最後發現頁中只存放了現有資料。而使用ibdata1恢復資料,應該是在瞭解資料表結構的前提下,資料庫除ibdata1外其他資料受損不能正常使用資料庫時嘗試,而不是刪了表資料後恢復什麼的。(事實上,這個檔案是儲存現有表資料的,其實也可以設定成每個表一個檔案。)

4.最後發現mysql下有ib_logfile0和ib_logfile1兩個檔案,其實這兩個檔案裡,記錄了Mysql的一些事物日誌,用於事務的前滾後滾,是Mysql自身使用的,這個檔案用文字工具開啟後,有很多亂碼,但卻可以查詢到被刪除的少量資料的insert記錄,極少數的亂碼通過前後語句找出了原文,最終通過事物日誌恢復了刪除的檔案。

注:用事物日誌恢復,需要幾個前提。

1:知道被刪除資料的大概位置,不要這邊查詢,那邊又不斷有新資料插入。

2:因為有很多亂碼,適用於查詢少量資料,而不是用作大量資料的恢復,浪費體力。

3:如果二進位制日誌沒開,沒有備份,那麼只能用這種方法恢復了。