-
背景:MySQL数据丢失,只剩下frm和ibd结尾的文件,由于先前没有备份也没开启binlog现在只能通过这两个文件来恢复数据。
-
安装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数据已经成功恢复