通过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的*.frm和*ibd文件恢复原有数据_第1张图片
建表之后会在对应的数据目录中生成两个文件 一个是建表语句一个是表内容

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

再检查数据库目录发现ibd文件已经没有了
通过mysql的*.frm和*ibd文件恢复原有数据_第2张图片

  • 复制原有的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数据已经成功恢复

你可能感兴趣的:(MySQL,mysql,数据库,数据丢失)