mysql5.65版本根据.frm和.ibd文件恢复表结构和数据

本文详细介绍了如何在Linux环境下,使用MySQL5.65恢复表结构和数据的步骤。首先创建与丢失表同名的空表,然后利用innodb_force_recovery参数进行恢复。在恢复过程中,由于原始表与新建表字段数量不匹配,需要根据错误日志调整表结构。最后,通过discard和import tablespace命令分别解除和重建数据文件与表的关联,从而完成数据恢复。整个过程需要注意服务的启停和配置文件的修改。

一、恢复表结构

  1、环境:Linux、mysql5.65;首先创建一个数据库,创建一个需要恢复的表的原始数据库。


  2、创建一张表,名称与你要你要恢复的.frm或者.ibd的名称一致,例如我的.frm与.ibd文件为 gonggao.frm  gonggao.ibd。我创建的表名就为gonggao,表里的字段随便加一个字段,后期会修改,例如
       create table gonggao(id int);

  3、表创建完成后,在服务里面或者使用net stop mysql先关闭数据库(注意:不能在数据库试用期间替换文件),然后用需要恢复的gonggao.frm覆盖这个新建的gonggao表的文件gonggao.frm,接着对配置文件(my.ini)设置innodb_force_recovery = 6(innodb_force_recovery是用来强制回复innodb数据库的,有6个有效配置,具体的可以自行百度查看配置效果),然后使用net start mysql启动服务,接着在命令行输入:desc gonggao; 查看该表结构,不出意外的话会出现下面错误信息 提示这个表不存在:

 5、明明存在这个表为什么会提示不存在呢?我们去看看日志:查看mysql安装目录下的data文件夹里面.err结尾的文件,你会发现出现下面所示的错误信息:[Warning] InnoDB: Table jd_wechat/wechat_info_cfcontains 1 user defined columns in InnoDB, but 4 columns in MySQL.原来是因为,我们要恢复的表有4个字段,而我们在创建表的时候只创建了1个字段。

  

  解决方案:删除gonggao表重新创建一个包含4个字段的表,具体这4个字段是什么不用管的。具体执行过程为使用net stop mysql停掉服务,然后在配置文件my.ini中将innodb_force_recovery = 6注释掉(#或;均可),再net start mysql启动服务。接着在控制台先执行drop table gonggao;删除表,再执行创建表语句,我执行的是下面的创建表语句:create table gonggao(id int,id1 int,id2 int,id3 int);
  紧接着按照前面的方式,使用net stop mysql关闭数据库服务,然后用需要恢复的gonggao.frm覆盖这个新建的ww数据库的gonggao表的物理文件gonggao.frm,接着对配置文件(my.ini)设置innodb_force_recovery = 6,然后使用net start mysql启动服务,接着使用:desc gonggao; 查看该表结构,输出下面结果表示恢复表结构成功:

  6、复制创建gonggao表的语句;我们需要通过创建表的语句重新创建表,当然在创建表之前需要将已经创建好的gonggao删除掉,具体获取创建表的语句可以通过navicat来实现,在navicat中选中gonggao表,右键点击"对象信息",出现下面截图信息,选中DDL,里面的内容就是我们创建gonggao表的sql语句了: 

  

  

  接着在控制台执行drop table gonggao;删除gonggao表,当然在执行删除gonggao命令之前,还需要停库将my.ini中的innodb_force_recovery = 6删除或者注释掉,再启动mysql。接着执行下面命令重新创建表即可:

  CREATE TABLE `gonggao` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `qihao` bigint(20) DEFAULT NULL COMMENT '号期,如1456',
  `gonggao_date` date DEFAULT NULL COMMENT '公告日期',
  `sn_this_year` smallint(6) DEFAULT NULL COMMENT '年本内的期号',
  PRIMARY KEY (`id`),
  KEY `index_qihao` (`qihao`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

 

二、恢复表数据

  1、恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:
    alter table gonggao discard tablespace;

       

  2、接着执行net stop mysql停掉服务,将需要恢复的gonggao.ibd文件覆盖这个新建的ww数据库的gonggao表的物理文件gonggao.ibd,执行net start mysql开启服务。

    

  3、将复制过来的gonggao.ibd文件与gonggao.frm文件发生联系。具体执行下面命令:
    alter table gonggao import tablespace;

      

  4、这时候通过navicat查看数据表,你会发现数据已经成功恢复啦。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值