意外卸载MySQL,通过数据目录中.frm和.ibd文件恢复数据。

         不小心给k8s集群卸载了,但是数据库的目录还在,本以为给数据目录拷贝到新的MySQL数据目录下,数据就会正常恢复,但是并没有那么简单。。。。 查阅了各种博客,终于发现了问题,接下来就讲一下如何用数据目录中的元数据恢复数据库。

1、数据目录文件解释

        MySQL默认的存储引擎从版本5.5.5开始就是InnoDB了,当你创建表时,如果没有明确指定存储引擎,MySQL就会使用默认的存储引擎InnoDB来创建表。这意味着表在文件系统中会有对应的.ibd和.frm文件。.ibd文件存储表的数据和索引,而.frm文件包含表的结构定义

        这些文件本身不能直接打开。因为InnoDB存储引擎的表数据与结构是密切相关的,所以在恢复数据之前,需要先恢复表的结构。就算有建表语句,但直接跳到.ibd文件恢复表数据也是不可行的,因为.ibd文件中存储的数据需要与正确的表结构相匹配才能被恢复。

        所以其正确的恢复步骤是启动MySQL,解析.frm生成表结构的语句,建表,然后丢弃这个表的表数据文件就是.ibd文件,停止MySQL服务,将原ibd文件拷贝到这个数据库的数据目录下,并赋予777权限,然后启动MySQL,绑定这个新的ibd文件文件即可。(解析.frm工具可以用dbseeker_frm。工具链接:https://pan.baidu.com/s/1KUPye337BGHgVHE6s_X-mw
提取码:Andy)

2、具体操作

1、启动新的MySQL,通过dbseeker解析表结构,建表。

点击这个,进去程序,选择.frm文件即可

2、建表完成之后,丢弃表数据文件.ibd,执行以下语句

-- your_table_name 你对应的表名
ALTER TABLE your_table_name DISCARD TABLESPACE;

3、停止MySQL,将要恢复的.ibd文件传入对应的目录,并且赋予 777 权限,注意表名是一样的。

4、启动MySQL,绑定恢复的.ibd数据文件。需执行以下语句

-- your_table_name 你对应的表名
ALTER TABLE your_table_name IMPORT TABLESPACE;

刷新表会发现数据恢复了!!!

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值