mysql数据库通过frm和ibd恢复数据

放在阿里云服务器上的一台Linux云服务器被挖矿了,一个开源系统demo演示网站被人上传违规信息,站点也被阿里云屏蔽了。准备迁移数据并重置服务器,匆忙之间拷贝了mysql/data目录下的数据文件就把服务重置了,忘记拷贝ibdata1,ibtmp1,ib_logfile几个文件了 ,然后悲剧了,还好有frm和ibd数据。

只有frm和ibd文件,数据库会报错的,查看表数据行的时候会出现 #1932 – Table ‘wp_users’ doesn’t exist in engine的错误提示。说明表结构和表空间对不上,无法识别。这就需要重建表结构和导入表空间了。frm是存储表结构的文件,ibd是表空间存储数据用的。

恢复步骤

1.新建库并导入表结构。 我这个博客使用的是wordpress,那就简单了。直接下载个安装一次就有了新的表结构。如果你没有表结构那么就需要自己一个一个建立了。表结构字段名不一定是原来的,但是数量上必须一致。

2.对新建库中每一个表执行 ALTER TABLE table_name DISCARD TABLESPACE; 卸载表空间

3.复制所有ibd文件到新建库的 mysql/data/your_database_name目录下。

4.导入表空间,ALTER TABLE table_name IMPORT TABLESPACE; 然后就能正常访问数据库了

值得注意的几个问题

1.mysql版本必须要一致,不然会失败。5.5版本及以下的没有表空间这一项。

2.新建的数据库表结构,表名/表字段数量,必须和备份文件中的一致。

发表评论