mysql數據庫通過ibd 恢復數據

注意:紅色字爲需要修改爲自己配置的地址、庫名、表名等信息的地方。

 灰色字的部分mysql5.6.8版本以上的不需要考慮。


1、有一個數據庫,數據庫中有一個和需要恢復的表的表名和表結構相同的表。

比如,需要恢復數據的表是test,那你的數據庫中就需要有一個表結構相同的test表。


2、找到記錄點。

linux命令:根目錄下:/usr/mysql/data/數據庫名字(msql安裝的地方)

3、先要把當前數據庫的表空間廢棄掉,使當前ibd的數據文件和frm分離。 

sql:ALTER TABLE test DISCARD TABLESPACE;(執行完sql後,表現爲表的ibd文件被刪除,但是千萬不要自己手動刪除 )

3.1、如果sql報錯,嘗試執行以下過程。

停止mysql服務,

添加innodb_force_recovery=1【innodb_force_recovery的含義參考:http://blog.csdn.net/u012887385/article/details/54406489】,

啓動mysql服務。

3.2、如果報錯Error Code: 1808. Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)

則在建表語句後加上  ROW_FORMAT=COMPACT

3.3、在MySQL 5.6之前,導入單個innodb表的idb文件需要對齊tablespace id,而如果tablespace id不一致,就需要通過在新庫不挺的新建表,來增長tablespace id,以致對齊tablespace id。

在5.6版本之後,增加了alter table  test for export命令,可以使導出的idb文件保持一致狀態,並且生成文件.cfg後綴文件。當我們需要單表複製的時候,直接拷貝.frm/.idb/.cfg文件

在5.6.8之後,可以不需要生成cfg文件,直接複製idb文件和結構文件即可進行導入!但是會生成如下警

Warning Code : 1810

InnoDB: IO Read error: (2, No such file or directory) Error opening './test/t_test.cfg', will attempt to import without schema verification


4、複製備份的t_test.ibd文件到數據庫的目錄下

修改t_test.ibd文件的權限。

linux命令:chown -R mysql:mysql t_test.ibd

可以查看一下文件權限是否從root改爲mysql。

linux命令:ll |grep t_test.ibd

5、把之前要恢復的 .ibd文件複製到新的表結構文件夾下。 使當前的ibd 和frm發生關係。

sql:ALTER TABLE test  IMPORT TABLESPACE;

5.1、如果之前使用了alter table  test for export命令,這裏則需要記得unlock tables釋放該鎖


6、數據就恢復好了,正常查看即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章