.frm是恢复表结构;.ibd是恢复表数据
(如果表结构是已知的,则可以直接跳过第一部分,从第二部分,恢复表数据开始看)
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个)
将mysql配置文件中innodb_force_recovery=6语句改为innodb_force_recovery=0或者删除掉(也就是把只读模式去掉),然后重新启动mysql 。删除(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表。
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;
此时如果出现以下错误信息:
这个错误信息是在数据库建表sql语句出错,就是恢复的数据与我们建立的表的row format不一致,我们重新将该表进行删除,然后待会在建表语句后加上ROW_FORMAT=COMPACT。
首先在数据库中对该表进行删除操作,同时需要删除data文件里边的tb_adm_info.ibd,不删除,则会出现下边的错误。
重新执行sql语句
然后重复前面的操作,关闭mysql连接 --> 覆盖tb_adm_info.frm --> 连接mysql -->将.ibd与.frm进行解绑(alter table tb_adm_info discard tablespace;)--> 将要恢复的tb_adm_info.ibd粘贴到data文件夹 --> 绑定 (alter table tb_adm_info import tablespace;),最终数据恢复完成啦。
以上便是mysql根据.frm和.ibd文件恢复表结构和数据的整个流程了,哪里看不懂或者跟着操作出错或者文章哪里有写的不对的地方都可以评论留言吖~