mysql根据.frm和.ibd恢复数据

事先准备:

1.准备MySQL数据库:版本5,7
2.准备需要回复的表的 frm和ibd文件 我的是user.frm 和user.ibd

恢复步骤:

一、恢复表结构:

  1. 建同名表,随便写一个字段就行
create table user(id int);
  1. 将新建的表的user.frm 和user.ibd进行备份,我备份到了/tmp目录下,并将user.frm替换需要恢复的user.frm

  2. 配置MySQL的配置文件,添加innodb_force_recovery = 6 重启MySQL
    (此配置在表结构不对时,MySQL仍能启动,但是删除表和创建表时必须注释或删除此配置)

  3. 进入数据库,然后查看表结构

desc user;

会报错:Table ‘test.user’ doesn’t exist 不用担心,然后查看MySQL error日志,与我是docker启动的,错误日志用 docker logs mysql --tail 200 查看,显示结果有有两列:
在这里插入图片描述

  1. 删除user表
    将user.frm替换为备份在/tmp的user.frm
    注释配置文件中的:innodb_force_recovery = 6 重启MySQL
drop table user;
  1. 新建user表,字段个数为错误日中的个数,类型随意:
create table user (id int,id2 int);

备份新生成的user.frm和user.ibd到/tmp目录,强制替换掉原来备份的
8. 将user.frm文件替换为需要恢复的user.frm文件
9. 查看创建表的语句并拷贝到本地文件中;

show create table user; 

在这里插入图片描述

10.去掉注释的innodb_force_recovery = 6 ,将user.frm 和user.ibd替换为/tmp目录下的。
进入MySQL,删掉表

drop table user;

二、恢复表数据

  1. 使用拷贝下来的创建表语句建表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  1. 删除表空间,也就是解除frm和ibd的关系
alter table user discard tablespace;
  1. 将user.frm 和user.ibd 替换需要恢复的文件
    并改变文件权限
chown -R mysql:mysql user.frm user.ibd
  1. 绑定数据表.frm和数据.idb的关系。

alter table user import tablespace;

恢复完成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值