通过mysql的*.frm和*ibd文件恢复原有数据

  • 背景:MySQL数据丢失,只剩下frm和ibd结尾的文件,由于先前没有备份也没开启binlog现在只能通过这两个文件来恢复数据。

  • 如果也是MySQL数据丢失,但是有frm和ibd文件可以通过此文档来解决MySQL数据丢失的问题

  • 安装MySQL Utilities

由于需要查看原有表结构,所以需要用这个软件来进行查询,有表结构的可以忽略这一步

#下载部署包
 wget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gz

#解压部署包
tar -xf mysql-utilities-1.6.5.tar.gz

#安装mysql utilities
mysql-utilities-1.6.5
python ./setup.py install --record instfile.log
  • 查看表结构
#查看原来的表结构
mysqlfrm --diagnostic sys_menu.frm

#查到表结构之后,在新数据库中进行建表

在这里插入图片描述
建表之后会在对应的数据目录中生成两个文件 一个是建表语句一个是表内容

  • 卸载表空间
MySQL [cwh]> alter table sys_menu discard tablespace;
Query OK, 0 rows affected (0.01 sec)

再检查数据库目录发现ibd文件已经没有了
在这里插入图片描述

  • 复制原有的idb文件到该数据库中

根据新生成的文件进行重命名

#拷贝文件到数据目录
docker cp sys_menu.ibd 45e0dd8c7147:/var/lib/mysql/cwh/
#查看文件
bash-4.2# ls -l
total 260
-rw-r----- 1 mysql mysql     65 Dec 25 09:20 db.opt
-rw-r----- 1 mysql mysql  13334 Jan 14 06:10 sys_menu.frm
-rw-r--r-- 1 root  root  245760 Jan 14 02:49 sys_menu.ibd
#授权ibd文件
bash-4.2# chown -R mysql.mysql sys_menu.ibd
  • 装载表空间
MySQL [cwh]> alter table sys_menu import tablespace;
Query OK, 0 rows affected, 1 warning (0.08 sec)
  • 检查数据
MySQL [cwh]> select count(*) from sys_menu;
+----------+
| count(*) |
+----------+
|     1066 |
+----------+
1 row in set (0.01 sec)

MySQL数据已经成功恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值