Mysql5.7利用frm与ibd恢复数据
2018-01-09 本文已影响0人
linjiajiam
服务器异常断电,重启后数据库里的数据全部打不开,只能看到表名。在workbench中体现如下:
![](https://img.haomeiwen.com/i7802645/7f891594cf15cbb0.png)
到服务器上面查看,数据文件啥的都还在
![](https://img.haomeiwen.com/i7802645/300f7420c3874af9.png)
到此,只能是尝试通过frm与ibd恢复数据。网上有多种方法,我这次的方法适用于:
1、frm、idb数据文件存在;
2:知道表名,但是不知道表字段。
开始恢复:
一、新建一个同名数据库,并且在里面新建一张表同名的表,字段随意。
![](https://img.haomeiwen.com/i7802645/8c5b7456eb894a30.png)
此处数据库我新建为test(注意数据库要同名,我这边随意新建的test),注意数据库编码要和原来的一样
新建一张同名的表,字段随意。此处我要恢复的表为collector
![](https://img.haomeiwen.com/i7802645/4e34b8c601c32e09.png)
![](https://img.haomeiwen.com/i7802645/03e74c89ffb2e984.png)
二、进入服务器/etc目录,修改my.cnf文件(此处我的服务器为centos)
增加
innodb_force_recovery = 6
![](https://img.haomeiwen.com/i7802645/dd64b846a84be71c.png)
三、拷贝frm文件覆盖新建表的frm
四、重启mysql
然后到workbench中,你会发现此时在报错
![](https://img.haomeiwen.com/i7802645/6cb74df888ecd7ad.png)
查看mysql的log日志:/var/log/mysqld.log
![](https://img.haomeiwen.com/i7802645/9775f4f7490fd727.png)
提示你老frm中有13个字段。所以我们比较麻烦:
1、删除test数据库中的collector表
2、再新建一个collector表,并且属性字段为13个,字段随意取名
如下图:
![](https://img.haomeiwen.com/i7802645/92a580c98a0f57b1.png)
![](https://img.haomeiwen.com/i7802645/b1cd36132576e27b.png)
五、再次拷贝frm文件覆盖新建表的frm,然后重启数据库
你会发觉,此时你的表结构已经恢复出来了。
![](https://img.haomeiwen.com/i7802645/ea96903b57b8c993.png)
所以,如果你知道你需要恢复数据的表结构,新建好一样数量属性的表结构后,直接覆盖重启就可以恢复表结构了。
六、恢复数据
1、用SecureCRT连接服务器,并登陆mysql后,选择的你数据库:
![](https://img.haomeiwen.com/i7802645/a67daf795a255a23.png)
2、执行一下命令
alter table collector discard tablespace;
![](https://img.haomeiwen.com/i7802645/d3e5d4a9631fc5b0.png)
3、拷贝原来的ibd文件,并覆盖新建表ibd,并修改权限
![](https://img.haomeiwen.com/i7802645/bb4b3898c578f5dd.png)
![](https://img.haomeiwen.com/i7802645/f36520ebdd538418.png)
4、执行
alter table collector import tablespace;
![](https://img.haomeiwen.com/i7802645/0506552c200c4920.png)
5、数据就已经出来了
![](https://img.haomeiwen.com/i7802645/668f01c542a0a30c.png)