MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法
沉沙 2018-05-14 来源 : 阅读 4522 评论 0

摘要:MySQL数据库恢复表结构,在只有.frm文件发现创建的表不能打开。在有了表结构的SQL语句之后创建表,完全就不需要frm文件了,但是ibd文件里的数据还是不能直接覆盖数据库里。本文讲解了MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法,希望对大家有所帮助。

MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。

MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。


恢复表结构,在只有.frm文件发现创建的表不能打开。在有了表结构的SQL语句之后创建表,完全就不需要frm文件了,但是ibd文件里的数据还是不能直接覆盖数据库里。

 

数据表数据,在mysql5.7 下重新建表

MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法

这里用的Navicat工具,在表结构建好后,去MySQL 的data目录下找到对应数据库,发现frm文件和ibd文件。Navicat中可以看到表,但是数据是没有的,这里将ibd文件覆盖之后发现数据表不能打开,会报[Err] 1146 - Table 'users' doesn't exist。


ibd文件覆盖,需要先放弃表空间,在创建表结构的时候,需要在sql语句后加上 ROW_FORMAT=COMPACT;将表结构改为静态表。

然后在命令行放弃表空间;删除刚才新创建的ibd文件;

mysql> ALTER TABLE产品DISCARD TABLESPACE;


之后将 ibd文件覆盖,重启MySQL服务,导入这个表空间;

mysql> ALTER TABLE产品IMPORT TABLESPACE;

   

显示Query OK , 0 rows affected ,成功之后表数据就会在表中,在这中间可能会出现

MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法

 

将MySQL服务强行关闭的情况,停掉mysql服务后,然后在配置文件my.ini中修改innodb_force_recovery = 1,再启动服务。

进行上一步操作,等数据表数据完成后再删除掉。

至此,使用.frm和.ibd文件恢复数据库数据的结束。

注意:最好重新配置一个空的MySQL来进行恢复操作,这样不会影响到MySQL下别的数据库,本例中使用的是MySQL 5.6.39版。

 

本文由职坐标整理发布,欢迎关注职坐标MySQL频道,学习更多数据库知识!


本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 1
看完这篇文章有何感觉?已经有2人表态,50%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程