您的位置:首页 > 数据库 > MySQL

mysql frm ibd 文件恢复数据

2015-05-21 13:31 1251 查看
另外准备一份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.ibd
2015-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 InnoDB
InnoDB: data dictionary it is 1.

最后在mysql test数据库里执行上面操作,竟然成功了。。。过了几分钟mysql又崩掉了,问题也懒得看了,把ib_logfile ibdata 还有数据库里面那些数据删掉,重启。后来又发现一个问题,一些字长度不足,数据会被截掉,打开表前先把表字段长度检查下,修改完再打开。

数据库一定要备份啊,说不定就会被人坑了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据 frm+ibd