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

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


Mysql5.7利用frm与ibd恢复数据_第1张图片
image.png

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


Mysql5.7利用frm与ibd恢复数据_第2张图片
image.png

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

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


Mysql5.7利用frm与ibd恢复数据_第3张图片
image.png

此处数据库我新建为test(注意数据库要同名,我这边随意新建的test),注意数据库编码要和原来的一样
新建一张同名的表,字段随意。此处我要恢复的表为collector
Mysql5.7利用frm与ibd恢复数据_第4张图片
image.png

Mysql5.7利用frm与ibd恢复数据_第5张图片
image.png

二、进入服务器/etc目录,修改my.cnf文件(此处我的服务器为centos)
增加
innodb_force_recovery = 6
Mysql5.7利用frm与ibd恢复数据_第6张图片
image.png

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


Mysql5.7利用frm与ibd恢复数据_第7张图片
image.png

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


image.png

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

Mysql5.7利用frm与ibd恢复数据_第9张图片
image.png

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


Mysql5.7利用frm与ibd恢复数据_第10张图片
image.png

所以,如果你知道你需要恢复数据的表结构,新建好一样数量属性的表结构后,直接覆盖重启就可以恢复表结构了。
六、恢复数据
1、用SecureCRT连接服务器,并登陆mysql后,选择的你数据库:
Mysql5.7利用frm与ibd恢复数据_第11张图片
image.png

2、执行一下命令
alter table collector discard tablespace;
image.png

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


Mysql5.7利用frm与ibd恢复数据_第12张图片
image.png

image.png

4、执行

alter table collector import tablespace;
image.png

5、数据就已经出来了


Mysql5.7利用frm与ibd恢复数据_第13张图片
image.png

你可能感兴趣的:(Mysql5.7利用frm与ibd恢复数据)