通过.frm和.ibd对mysql数据恢复

yeweiluo0704 2017-03-08 12:38:43
误删了数据库数据,只恢复了.frm和.ibd文件,将文件拷贝到data文件下,生成的表打不开,也没有数据。
报错1146- tableXXX doesn't exist。求助,如何恢复原始数据库数据。
...全文
1331 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xin_heng 2019-08-06
  • 打赏
  • 举报
回复
保证版本一致才行.比如说被恢复表与恢复表,都是mysql5.6
Bevin_chen 2017-10-19
  • 打赏
  • 举报
回复
参考这个:http://blog.chenapp.com/archives/445
lamking 2017-03-08
  • 打赏
  • 举报
回复
刚好今天也忙,忙到刚才。 例如说 现在要恢复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,再创建表导入。
yeweiluo0704 2017-03-08
  • 打赏
  • 举报
回复
引用 2 楼 lamking 的回复:
要看版本。高于5.5的,直接创建个结构一样的数据库,然后discard掉相应表空间之后,再import ,低版本的,就创建个结构一样的数据库,然后查看对应表的表空间id,没记错的话,应该是37-38字节,然后把你保存的ibd文件的37-38字节表空间id改成和前面一样的,然后把ibd盖过去,就可以了。
版本是5.6的,我按照你说的discard掉表空间后,是直接把.frm和.ibd文件粘贴过去就行么?我把他粘过去,就说tablespace has been discarded for table 'XXX',麻烦再给详细说下,O(∩_∩)O谢谢
lamking 2017-03-08
  • 打赏
  • 举报
回复
要看版本。高于5.5的,直接创建个结构一样的数据库,然后discard掉相应表空间之后,再import ,低版本的,就创建个结构一样的数据库,然后查看对应表的表空间id,没记错的话,应该是37-38字节,然后把你保存的ibd文件的37-38字节表空间id改成和前面一样的,然后把ibd盖过去,就可以了。
yeweiluo0704 2017-03-08
  • 打赏
  • 举报
回复

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧