mysql誤刪數(shù)據(jù)庫表的frm文件和ibd文件?試試這樣恢復
之所以做這個實驗,也是有個朋友誤刪了某張表的frm和ibd文件,然后要導入數(shù)據(jù)的時候一直提示無法重新創(chuàng)建這張表,這時候應該怎么解決呢?我們用一個實驗來看看。。
以下ERROR 29 (HY000):
測試在t表表結構不存在的時候插入數(shù)據(jù),發(fā)現(xiàn)可以插入成功
重啟之前得在其他數(shù)據(jù)庫新建t表結構,然后復制frm文件到原數(shù)據(jù)庫即可
因為myisam不需要記錄信息到數(shù)據(jù)字典,所以drop后重建就行了
此時t2表結構和數(shù)據(jù)已經(jīng)恢復
可以發(fā)現(xiàn)修復不成功
考慮到在使用innoDB引擎的數(shù)據(jù)庫中,其實際數(shù)據(jù)不是存放在數(shù)據(jù)庫目錄下的,而是放在一個叫ibdata1的文件內(nèi)(默認配置時),其目錄下只是放置了數(shù)據(jù)庫的表及表結構相關的信息。這里在其他庫上建立t表及數(shù)據(jù),然后將這個表復制到test庫下
拷貝后發(fā)現(xiàn)還是沒有恢復成功
升級后還是沒有恢復成功
因為共享表空間記錄了信息
配置文件的一個參數(shù):innodb_force_recovery
innodb_force_recovery 會影響整個InnoDB存儲引擎的恢復狀況。默認為0,表示當需要恢復時執(zhí)行所有的
innodb_force_recovery可以設置為1-6,大的數(shù)字包含前面所有數(shù)字的影響。當設置參數(shù)值大于0后,可以對表進行
select,create,drop操作,但insert,update或者delete這類操作是不允許的。
1、在mysql庫創(chuàng)建t表及數(shù)據(jù)
2、停止數(shù)據(jù)庫
3、復制frm和ibd文件
4、修改參數(shù)
5、兩次啟動數(shù)據(jù)庫
啟動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、誤刪數(shù)據(jù)文件時不要忙著重啟數(shù)據(jù)庫,先查看表是否存在,做一下備份
2、定期備份是很重要的
3、以上innodb表實際上只恢復了表結構,表數(shù)據(jù)并沒有恢復,可以考慮通過mysqlbinlog進行回退
覺得有用的朋友多幫忙轉(zhuǎn)發(fā)哦!后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關注下~
下一篇:mysql連接報“Communications link failure”錯誤