服务器异常断电,重启后数据库里的数据全部打不开,只能看到表名。在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
网友评论