最近的服务器惨败给我留下了一个完整的ibdata文件,但只有一半的.frm包含的目录。 我已经复制了所有这一切到一个新的MySQL安装,并成功地恢复了我仍然有.frm文件的数据库。 我的问题是 – 是否有可能以某种方式从ibdata文件重新生成.frm文件? 或者以某种方式修改相同数据库的开发版本中的.frm文件,以便它们可以用于恢复?
不幸的是,从备份恢复不是一个可行的select。
编辑澄清:我试图恢复数据库使用本地生成.frm文件包含相同的模式 – 没有骰子,即使在innodb_force_recovery = 1。
我从来没有这样做,但你的问题涉及到我使用的工具,所以我很好奇! 看起来这实际上是可能的,这里是一个例子:
http://www.chriscalender.com/?p=28
有时你可能需要恢复一个表,当你有.ibd文件。 在这种情况下,如果您尝试将其加载到新实例中,您可能会遇到有关表id不匹配的一些错误。 并没有真正的解决方法。
不过,我发现了两个解决方法:
注意:对于要使用这些方法恢复的每个表,您将需要.ibd文件和CREATE TABLE语句。
- 模拟内部InnoDB表计数器。 也就是说,创build工作表(使用innodb_file_per_table启用),直到您具有表id的内部指针等于(1 – id_of_ibd_table_you_need_to_restore)。 (见方法#1)
- 手动hex编辑.ibd文件,更改表ID。 (见方法2)
这些步骤本身有几页,所以我没有在这里粘贴。
另一个相关的post: http : //www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/
我会好奇的听到,如果这有效,它看起来像多人已经成功地使用它。