注意:紅色字爲需要修改爲自己配置的地址、庫名、表名等信息的地方。
灰色字的部分mysql5.6.8版本以上的不需要考慮。
1、有一個數據庫,數據庫中有一個和需要恢復的表的表名和表結構相同的表。
比如,需要恢復數據的表是test,那你的數據庫中就需要有一個表結構相同的test表。
2、找到記錄點。
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.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。
5、把之前要恢復的 .ibd文件複製到新的表結構文件夾下。 使當前的ibd 和frm發生關係。
sql:ALTER TABLE test IMPORT TABLESPACE;
5.1、如果之前使用了alter table test for export命令,這裏則需要記得unlock tables釋放該鎖
6、數據就恢復好了,正常查看即可。