mysql ibd恢复数据_mysql文件损坏通过.ibd文件恢复数据

前言:

笔者前两天云服务器上的mysql服务突然自己停止。报错日志一看出现自身bug导致服务启动不了。

当时和下面一样一脸懵逼。。

b9cd92771747

7fc84643f9023204c1ccf7f405e31f4c.jpg

官网表示:请升级mysql版本或者更换版本。笔者用的是8.0

重新初始化mysql服务后,启动后数据已经不见。回去看原来data文件下的表ibd文件还在,所以一直在寻找通过ibd恢复数据的方法。找了几天,网上各种版本都不靠谱。尝试N次要吐了。

b9cd92771747

c034347e331139cd7ccf7c49e05f642b.jpg

在老板对我的鞭策下,终于找到一个靠谱可用的。

分享一下,希望能帮到你。

正文

首先,介绍一下mysql的数据库文件。

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

没有frm的话只要能自己写出创建表的语句。先把表创建了就可以不需要frm。

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

当innodb_file_per_table = 0使用共享表空间,所有数据库的表和索引数据存储在ibdata文件里。

恢复方法:

1.备份损坏数据表的.ibd文件

2.删除表结构

DROP TABLE tb_xxx;

3.重新创建表结构

CREATE TABLE tb_xxx ....

4.以下命令会删除新表的.ibd文件

ALTER TABLE tb_xxx DISCARD TABLESPACE;

5.拷贝备份的.ibd文件到数据文件夹

6导入数据文件

ALTER TABLE tb_xxx IMPORT TABLESPACE;

刷新navicat中的表看看数据是不是回来了。

完成恢复

亲测可用!

帮助到你了欢迎点赞评论交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值