服务器MySQL在操作的时候意外蹦了,然后所有表都访问不了了,关闭服务,然后重新启动,发现提示window无法启动MySQL服务 错误1067:进程意外终止,然后就开始各种百度补救措施,折腾了一天,还好找到了恢复的方法….
我的MySQL是5.6.21版本的
ENGINE为InnoDB
innodb_file_per_table为on(这个默认是on的,引擎独立表空间)
恢复的前提是要知道对应表的结构,因为恢复过程中要创建完全一样结构的表
解决方案:
找到mysql数据所在的源文件data文件夹,然后里边会有很多文件夹,这些文件夹都对应你的每个数据库名字,找到你要恢复的那个表所在的数据库文件夹,进去后会看到对应这个库中所有的表,每个表有两个文件,一个是.frm后缀的(存储表数据),一个是.ibd后缀的(存储表结构),另外如果表有索引的话可能表对应的文件是其他后缀结尾的,我恢复的表没有涉及到这类,所以这个解决方案好不好用待测。
1.把需要恢复的表的.ibd后缀的文件都复制出来
2.然后找一个可以正常运行的MySQL,创建一个新的库,然后创建相同结构的空表
3.执行ALTER TABLE 表名称 DISCARD TABLESPACE;
4.找到MySQL源文件的data文件夹,进入新创建的库文件夹中,你会发现执行完3后这个表只剩下了.frm文件,把待恢复的表的.ibd文件复制过来放进去
5.执行ALTER TABLE 表名称 IMPORT TABLESPACE;
6.通过select查询表,查看表是否可打开并且数据正常。
例子:
要恢复的表名为students
1.从崩掉的MySQL源文件data文件夹中找到students.ibd文件拷贝一份
2.找一个好用的MySQL数据库,创建一个新的数据库(当然一个已经存在的也行),在该数据库中新建students表,结构要和待恢复的表完全一样。
3.执行ALTER TABLE students DISCARD TABLESPACE;
4.把students.ibd文件拷贝到data文件夹下新创建的students表所在数据库表中和students.frm文件放在一块儿
5.执行ALTER TABLE students IMPORT TABLESPACE;
6.通过select * from students 查看之前的数据是否恢复并正常
我找的这种方法比较麻烦,基本上是看网上的解决方案各种本地试,目的是能恢复就行,没有深入的研究,有大牛的话欢迎各种拍砖。
终于耐下心写的第一篇博客 mark下 ……..