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

服务器异常断电,重启后数据库里的数据全部打不开,只能看到表名。在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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容