navicat刪除的數(shù)據(jù)能還原嗎?
navicat刪除的數(shù)據(jù)是可以還原的。
用navicat刪除數(shù)據(jù)庫中的入侵?jǐn)?shù)據(jù),導(dǎo)致刪順手了,把一些看似重復(fù)數(shù)據(jù)的重要數(shù)據(jù)在表中直接右鍵刪除掉了(相當(dāng)于delete from table命令),而該數(shù)據(jù)庫沒有做過這些數(shù)據(jù)的備份,同時沒有開啟二進制日志,常規(guī)的恢復(fù)方法徹底走入死路。
在解決的過程中,做過以下幾種嘗試:
1.了解到如果開啟了日志,直接mysqlbinlog 使用日志恢復(fù)即可。
2.如果不是刪除了一個表的部分?jǐn)?shù)據(jù),而是刪除整個表,那么可以在刪除后馬上用磁盤數(shù)據(jù)恢復(fù)軟件嘗試恢復(fù)。(因為刪除表后會有文件被刪除,而刪除表的部分?jǐn)?shù)據(jù),文件還是存在)
3.找數(shù)據(jù)恢復(fù)的公司,該公司號稱用ibdata1就能恢復(fù),于是我使用工具分析ibdata1,一頁一頁查看有沒有歷史記錄存在,最后發(fā)現(xiàn)頁中只存放了現(xiàn)有數(shù)據(jù)。
而使用ibdata1恢復(fù)數(shù)據(jù),應(yīng)該是在了解數(shù)據(jù)表結(jié)構(gòu)的前提下,數(shù)據(jù)庫除ibdata1外其他數(shù)據(jù)受損不能正常使用數(shù)據(jù)庫時嘗試,而不是刪了表數(shù)據(jù)后恢復(fù)什么的。(事實上,這個文件是存儲現(xiàn)有表數(shù)據(jù)的,其實也可以設(shè)置成每個表一個文件。)
4.最后發(fā)現(xiàn)mysql下有ib_logfile0和ib_logfile1兩個文件,其實這兩個文件里,記錄了Mysql的一些事物日志,用于事務(wù)的前滾后滾,是Mysql自身使用的,這個文件用文本工具打開后,有很多亂碼,但卻可以查找到被刪除的少量數(shù)據(jù)的insert記錄,極少數(shù)的亂碼通過前后語句找出了原文,最終通過事物日志恢復(fù)了刪除的文件。
相關(guān)推薦:《Navicat for mysql使用圖文教程》
注:用事物日志恢復(fù),需要幾個前提。
1:知道被刪除數(shù)據(jù)的大概位置,不要這邊查找,那邊又不斷有新數(shù)據(jù)插入。
2:因為有很多亂碼,適用于查找少量數(shù)據(jù),而不是用作大量數(shù)據(jù)的恢復(fù),浪費體力。
3:如果二進制日志沒開,沒有備份,那么只能用這種方法恢復(fù)了。