mysql frm ibd 文件恢复数据

来源:互联网 发布:詹姆斯最新数据排名 编辑:程序博客网 时间:2024/05/17 03:09

另外准备一份mysql环境,版本等要一样。

随便创建一个数据库


1.在里面建一个表 便结构需要和要恢复的表结构一致
CREATE TABLE `xxx` (  `id` int(32) NOT NULL AUTO_INCREMENT ,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9021 DEFAULT CHARSET=utf8 

2. 移除表空间ALTER TABLE xxx DISCARD TABLESPACE;
3. 将ibd文件上传到数据库文件下,我这里路径是/var/lib/mysql/test2/。
4. 将ibd权限放开 chmod 777 /var/lib/mysql/test2/xxx.ibd
5. 导入表空间 ALTER TABLE xxx IMPORT TABLESPACE;
6. 运气比较好,40+表只有1个表不能直接把数据转过来,查看数据就会直接停掉mysql服务。
日志:InnoDB: Attempted to open a previously opened tablespace. Previous tablespace wittc1/tb_wittc_online_meeting uses space ID: 1 at filepath: ./wittc1/tb_wittc_online_meeting.ibd. Cannot open tablespace mysql/innodb_table_stats which uses space ID: 1 at filepath: ./mysql/innodb_table_stats.ibd2015-05-21 13:02:08 7f02b42ec720  InnoDB: Operating system error number 2 in a file operation.应该就是网上说的tablespace id 问题,修改innodb_force_recovery无效。
没找到类似的错误日志:081010 11:47:40  InnoDB: Error: tablespace id in file '.test1product.ibd' is 1193, but in the InnoDBInnoDB: data dictionary it is 1.
最后在mysql test数据库里执行上面操作,竟然成功了。。。过了几分钟mysql又崩掉了,问题也懒得看了,把ib_logfile ibdata 还有数据库里面那些数据删掉,重启大笑。后来又发现一个问题,一些字长度不足,数据会被截掉,打开表前先把表字段长度检查下,修改完再打开。
数据库一定要备份啊,说不定就会被人坑了微笑

0 0