.frm是恢复表结构;.ibd是恢复表数据

(如果表结构是已知的,则可以直接跳过第一部分,从第二部分,恢复表数据开始看)

一、表结构恢复(.frm)

1.创建表,和要恢复的表同名(这里以tb_adm_info为例),字段随意,注意引擎要选择InnoDB(如果是利用建表工具,则在选项中可以看到引擎选择)

2.关闭mysql(我是去计算机管理里边关的),将要恢复的tb_adm_info.frm覆盖新创建的。

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_字段

在mysql配置文件my.ini中添加下面语句:

innodb_force_recovery=6(只读模式)

然后重新启动mysql,通过desc tb_adm_info查看表的结构;然后报错如下图所示:

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_02

 找不到数据表(这个先不用管它)

3.查看mysql文件目录下.err文件(在data文件里边)

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_字段_03

找到报错信息:(刚刚自己创建的字段是1个,从报错信息可以看出,原表的字段是6个) 

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_04

删除(drop table tb_adm_info)刚刚创建的表并重新创建6个字段的表(仍需同名), 字段名仍随意,数量一致即可,注意引擎要选择InnoDB。

        然后再关掉 mysql服务,重新添加只读模式参数(=6那个),覆盖.frm文件并重启,然后desc table就可以看到表结构啦

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_05

 利用show create table tb_adm_info;来获取创建tb_adm_info的语句,保存起来待会要用

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_字段_06

         再次删除配置文件中的只读模式(=6那个),然后重启mysql,删除tb_adm_info表,利用前边show create table获取到的sql重新创建一下tb_adm_info表。

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_07

 

 二、恢复表数据(.ibd)

 1.恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体是执行下面命令:

alter table tb_adm_info discard tablespace;

此时可以看到data文件夹中的 tb_adm_info.ibd文件已经没了。

2.关闭数据库,将要恢复的tb_adm_info.ibd粘贴到data文件夹中,然后将其与 tb_adm_info.ifm进行绑定,具体是执行下面命令:(记得先打开mysql再去执行吼)

alter table tb_adm_info import tablespace;

此时如果出现以下错误信息: 

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_08

row format不一致,我们重新将该表进行删除,然后待会在建表语句后加上ROW_FORMAT=COMPACT

        首先在数据库中对该表进行删除操作,同时需要删除data文件里边的tb_adm_info.ibd,不删除,则会出现下边的错误。

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_表结构_09

        重新执行sql语句

mysqldump 还原 Got errno 2 on write mysql .frm数据还原_字段_10

.ibd粘贴到data文件夹 --> 绑定 (alter table tb_adm_info import tablespace;),最终数据恢复完成啦。