使用mysql数据库的时候不小心误删除了ibdata和ib_logfile文件,但是幸好.ibd文件还在。这种情况下其实数据还在并未丢失,丢失的是表结构。查询表数据时会报错:ERROR 1146 (42S02): Table ‘testdb.test’ doesn’t exist,其实是说表结构不存在。
这种情况下数据是可以恢复的,具体方法如下:
1、set foreign_key_checks=0;
取消外键关联检查,否则移除表空间的话会报错。

2、drop table test/ drop database testdb

3、 先备份要恢复的数据库(比如testdb)目录的.ibd文件,然后删除.frm 和.ibd文件

4、按照备份.ibd文件时的表结构新建表
备注:row_format要和ibd文件的row_format一致,否则,会提示两者不一致。

5、移除表空间
alter table test DISCARD TABLESPACE;

6、将备份的ibd文件放到testdb目录下并修改它的所有者和所属组为mysql:mysql
chown mysql:mysql ./test.ibd

7、 重新导入表空间
alter table test IMPORT TABLESPACE;

8、set foreign_key_checks=1;
重新设置外键关联检查。

Logo

一站式 AI 云服务平台

更多推荐