面試官:當你誤刪某張數據庫表的frm和ibd文件時,該如何恢復?
瀏覽量: 次 發布日期:2023-10-06 23:15:43
面試官:當你誤刪某張數據庫表的frm和ibd文件時,該如何恢復?
上海數據恢復之所以做這個實驗,也是有個朋友誤刪了某張表的frm和ibd文件,然后要導入數據的時候一直提示無法重新創建這張表,這時候應該怎么解決呢?我們用一個實驗來看看。。
以下ERROR 29 (HY000): File 'http://www.toutiao.com/a6780600319429575175/test/t2.MYD' not found (Errcode: 2 - No such file or directory)提示表明t2數據庫文件損壞了
測試在t表表結構不存在的時候插入數據,發現可以插入成功
重啟之前得在其他數據庫新建t表結構,然后復制frm文件到原數據庫即可
因為myisam不需要記錄信息到數據字典,所以drop后重建就行了
此時t2表結構和數據已經恢復
可以發現修復不成功
考慮到在使用innoDB引擎的數據庫中,其實際數據不是存放在數據庫目錄下的,而是放在一個叫ibdata1的文件內(默認配置時),其目錄下只是放置了數據庫的表及表結構相關的信息。這里在其他庫上建立t表及數據,然后將這個表復制到test庫下
拷貝后發現還是沒有恢復成功
升級后還是沒有恢復成功
因為共享表空間記錄了信息
配置文件的一個參數:innodb_force_recovery
innodb_force_recovery 會影響整個InnoDB存儲引擎的恢復狀況。默認為0,表示當需要恢復時執行所有的
innodb_force_recovery可以設置為1-6,大的數字包含前面所有數字的影響。當設置參數值大于0后,可以對表進行
select,create,drop操作,但insert,update或者delete這類操作是不允許的。
1、在mysql庫創建t表及數據
2、停止數據庫
3、復制frm和ibd文件
4、修改參數
5、兩次啟動數據庫
啟動mysql,再關閉mysql 把配置innodb_force_recovery = 6給刪除了,然后啟動mysql
連云港數據恢復6、drop 表后重建
提示ERROR 1813 (HY000): Tablespace '`test`.`t`' exists或ERROR 1813 (HY000): Unknown error 1813都是表空間問題
此時只需要刪除對應的.ibd文件即可或者alter table t discard tablespace;來刪除
1、誤刪數據文件時不要忙著重啟數據庫,先查看表是否存在,做一下備份
2、定期備份是很重要的
3、以上innodb表實際上只恢復了表結構,表數據并沒有恢復,可以考慮通過mysqlbinlog進行回退
覺得有用的朋友多幫忙轉發哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~