.frm是恢复表结构;.ibd是恢复表数据
(如果表结构是已知的,则可以直接跳过第一部分,从第二部分,恢复表数据开始看)
一、表结构恢复(.frm)
1.创建表,和要恢复的表同名(这里以tb_adm_info为例),字段随意,注意引擎要选择InnoDB(如果是利用建表工具,则在选项中可以看到引擎选择)
2.关闭mysql(我是去计算机管理里边关的),将要恢复的tb_adm_info.frm覆盖新创建的。
在mysql配置文件my.ini中添加下面语句:
innodb_force_recovery=6(只读模式)
然后重新启动mysql,通过desc tb_adm_info查看表的结构;然后报错如下图所示:
找不到数据表(这个先不用管它)
3.查看mysql文件目录下.err文件(在data文件里边)
找到报错信息:(刚刚自己创建的字段是1个,从报错信息可以看出,原表的字段是6个)
删除(drop table tb_adm_info)刚刚创建的表并重新创建6个字段的表(仍需同名), 字段名仍随意,数量一致即可,注意引擎要选择InnoDB。
然后再关掉 mysql服务,重新添加只读模式参数(=6那个),覆盖.frm文件并重启,然后desc table就可以看到表结构啦
利用show create table tb_adm_info;来获取创建tb_adm_info的语句,保存起来待会要用
再次删除配置文件中的只读模式(=6那个),然后重启mysql,删除tb_adm_info表,利用前边show create table获取到的sql重新创建一下tb_adm_info表。
二、恢复表数据(.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;
此时如果出现以下错误信息:
row format不一致,我们重新将该表进行删除,然后待会在建表语句后加上ROW_FORMAT=COMPACT。
首先在数据库中对该表进行删除操作,同时需要删除data文件里边的tb_adm_info.ibd,不删除,则会出现下边的错误。
重新执行sql语句
.ibd粘贴到data文件夹 --> 绑定 (alter table tb_adm_info import tablespace;),最终数据恢复完成啦。