要看版本。高于5.5的,直接创建个结构一样的数据库,然后discard掉相应表空间之后,再import ,低版本的,就创建个结构一样的数据库,然后查看对应表的表空间id,没记错的话,应该是37-38字节,然后把你保存的ibd文件的37-38字节表空间id改成和前面一样的,然后把ibd盖过去,就可以了。
例如说 现在要恢复user表
1、先建立和之前user表一样的表结构。就是执行create table user .... ,执行完,数据库目录下就会建立user.ibd文件(当然还有其他的)2、执行 alter table `user` discard tablespace ; 执行完之后,数据库目录下的user.ibd文件就没了
3、把你备份的ibd放到消失的user.ibd文件那里。
4、给这个文件加权限,所有者mysql ,权限660(你可以参考别的ibd文件所有者和权限设置)
5、执行 alter table `user` import tablespace; 执行完,表数据就可读了,这时候会丢失一些诸如表行记录数等存在系统表里的信息,不过那些信息无所谓。表其实这时候已经可以正常用了。如果不放心,可以导出sql语句或txt,再创建表导入。