在 Linux 中将 *.frm 、*.ibd 文件恢复到 Mysql 中
一、恢复表结构
1.1、创建空的数据库
步骤省略,可直接搜索
重要提示:在创建空的数据库之前,一定要先将原本的数据库备份
1.2 、得到表结构的 SQL (不知道 create table)
使用 dbsake 工具
github地址:dbsake工具 GitHub 仓库
安装方法非常简单
cd ~
mkdir dbsake
cd dbsake
curl -s get.dbsake.net > dbsake
chmod u+x dbsake
./dbsake frmdump [frm-File-Path] >> /root/dbsake/File
如果遇见 UnicodeDecodeError 错误,请检查数据库 .frm 文件的路径是否存在非英文
1.3、创建表结构
打开 /root/dbsake/File 文件,将其中的
xxxxxxxxxx
ENGINE=MyISAM DEFAULT CHARSET=utf8;
全部替换为
xxxxxxxxxx
engine=InnoDB row_format=COMPACT;
使用指令进入数据库
xxxxxxxxxx
mysql -u 用户名 -p
输入密码(密码输入不可见,但确实已经输入)
.进入数据库后
xxxxxxxxxx
USE 数据库名
将复制的内容全部粘贴
二、恢复表数据
2.1、删除新建表的表空间
xxxxxxxxxx
alter table 表名 discard tablespace;
2.2、将待恢复的 .idb 文件复制到新的 Mysql 数据目录下
xxxxxxxxxx
cp /旧的数据库文件路径/*.idb /新的数据库文件路径/
2.3、将新的表空间与表结构进行绑定
xxxxxxxxxx
alter table 表名 import tablespace;
三、测试
查询导入的数据
xselect * from 表名;
如果数据库文件不存在 .dib 文件,而是 .myi 和 .myd 文件,则只需要创建空的数据库后将数据库文件复制到新的空的数据库目录下即可