Mysql5.7利用frm与ibd恢复数据

2018-01-09  本文已影响0人  linjiajiam

服务器异常断电,重启后数据库里的数据全部打不开,只能看到表名。在workbench中体现如下:


image.png

到服务器上面查看,数据文件啥的都还在


image.png
到此,只能是尝试通过frm与ibd恢复数据。网上有多种方法,我这次的方法适用于:
1、frm、idb数据文件存在;

2:知道表名,但是不知道表字段。
开始恢复:
一、新建一个同名数据库,并且在里面新建一张表同名的表,字段随意。


image.png
此处数据库我新建为test(注意数据库要同名,我这边随意新建的test),注意数据库编码要和原来的一样
新建一张同名的表,字段随意。此处我要恢复的表为collector
image.png
image.png
二、进入服务器/etc目录,修改my.cnf文件(此处我的服务器为centos)
增加
innodb_force_recovery = 6
image.png

三、拷贝frm文件覆盖新建表的frm
四、重启mysql
然后到workbench中,你会发现此时在报错


image.png

查看mysql的log日志:/var/log/mysqld.log


image.png
提示你老frm中有13个字段。所以我们比较麻烦:
1、删除test数据库中的collector表
2、再新建一个collector表,并且属性字段为13个,字段随意取名
如下图:
image.png
image.png

五、再次拷贝frm文件覆盖新建表的frm,然后重启数据库
你会发觉,此时你的表结构已经恢复出来了。


image.png
所以,如果你知道你需要恢复数据的表结构,新建好一样数量属性的表结构后,直接覆盖重启就可以恢复表结构了。
六、恢复数据
1、用SecureCRT连接服务器,并登陆mysql后,选择的你数据库:
image.png
2、执行一下命令
alter table collector discard tablespace;
image.png

3、拷贝原来的ibd文件,并覆盖新建表ibd,并修改权限


image.png
image.png

4、执行

alter table collector import tablespace;
image.png

5、数据就已经出来了


image.png
上一篇 下一篇

猜你喜欢

热点阅读