MySQL: frm文件与idb文件恢复数据表

安装 Mysqlfrm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#下载 mysql-utilities 软件包
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz

tar zxf mysql-utilities-1.6.5.tar.gz

cd mysql-utilities-1.6.5

apt-get install python -y

python ./setup.py build

python ./setup.py install

mysqlfrm --version

生成 SQL

1
mysqlfrm --diagnostic ./frm文件目录/ >> sql.sql

数据库以及表结构创建

生成的 SQL 语句会带有数据库,创建数据库时需进行对应,创建完数据库后,运行 SQL 语句进行表结构创建。

表空间卸载

1
2
## 单表
ALTER TABLE 表名 DISCARD TABLESPACE;
1
2
## 数据库下的所有表
SELECT concat('alter table ', table_name,' discard tablespace;') FROM information_schema.tables WHERE table_schema ='数据库名';

覆盖 idb 文件

将需要恢复的 idb 文件复制到对应数据库文件夹下,覆盖掉默认创建的 idb 文件

修改文件权限

1
2
# 此步很重要
chown -R mysql:mysql 数据库文件夹/*

导入表空间

1
2
## 单表
ALTER TABLE 表名 IMPORT TABLESPACE;
1
2
## 数据库下的所有表
SELECT concat('alter table ', table_name,' import tablespace;') FROM information_schema.tables WHERE table_schema = '数据库名';

参考

https://pdf.us/2019/01/10/2620.html