在MySQL中创建InnoDB类型时,对于一个表会创建俩个文件,分别是.ifm和.ibd文件
文件
-
.ifm 是存储结构的文件
-
.ibd 是存储数据的文件
恢复步骤(一个表, 多表按理操作)
找回表结构
-
首先创建一个表名与需要恢复数据的表名一致的空白表(InnoDB引擎)
-
关闭MySQL
-
将需要恢复的.ifm文件将新建的覆盖(路径是在my.cnf文件配置的datadir)
-
启动MySQL
service mysqld start
mysql -u root -p
# 进入MySQL
Enter password: xxx
use test
# 查看表结构
show create table test;
表结构显示正常即可进入下一步
找回数据
1.进入MySQL后的操作:
use test
# 先要把当前数据库的表空间废弃掉,使当前ibd的数据文件和frm分离
ALTER TABLE test DISCARD TABLESPACE;
# 1.之后就可以使用FTP工具操作文件(如:Xftp)
# 2.将需要恢复的.ibd文件导入my.cnf文件配置的datadir中(test目录)
# 3.需要使当前的ibd 和frm发生关系
ALTER TABLE test IMPORT TABLESPACE;
这里遇到了问题:无法执行以上的IMPORT命令,经过检查发现是文件的所在组(既所有者,权限)不一样,是为root,需要改成mysql。
exit # 退出mysql
#更改权限
chown mysql.mysql /data/mysql(my.cnf文件配置的datadir) -R
更改权限后,重新进入MySQL即可重新操作IMPORT命令了。
最后完成.frm和.ibd文件恢复数据操作。