如何恢复MySQL数据库:文件'./xxx.frm'中的信息不正确。

9
一个非常重要的数据库在共享Web主机上的服务器上已经损坏了,而我没有备份。该表格包含了一份非常重要的电子邮件地址列表。我可以获取一个表列表,但是如果我使用Navicat或phpMyAdmin打开任何表格,我会得到以下错误:
“./the-table-name.frm”文件中的信息不正确
我能够从Web主机获得与数据库相关联的.frm文件。
里面还有其他数据,但是如果我能至少获取电子邮件地址,我就可以处理。
我该如何恢复这个数据库?
我愿意支付某人来修复这个问题。
2个回答

17

这个问题适合在ServerFault上讨论。

.FRM文件不包含任何"数据",它们仅仅是表的定义。

如果以下所有条件都成立:

  • 表使用MyISAM存储引擎
  • 您知道重新创建表所需的CREATE TABLE语句

那么,请执行以下操作:

  1. 停止MySQL
  2. 备份table_name.frm、table_name.MYI、table_name.MYD文件
  3. 从mysql数据目录(通常为/var/lib/mysql)中删除它们
  4. 启动MySQL
  5. 重新创建表
  6. 停止MySQL
  7. 将.MYD和.MYI文件复制回datadir,替换其中的文件。
  8. 启动MySQL
  9. ???
  10. 收益

谢谢……但这是否意味着如果我使用InnoDB,我就完了? - Paul Gordon
InnoDB比MyISAM更加“崩溃安全”且更具弹性。在正常的mysql使用中,.frm文件不会被损坏。如果不知道您做了什么,我无法帮助您。无论如何,这已经超出了SO的范围,因为它与编程无关。 - hobodave
它对我不起作用,表仍然损坏。 - piggyback
我不记得我的表结构了。有没有重新创建表的方法? - Siraj Alam

0

我曾经遇到过类似的问题,后来发现是MySQL InnoDB引擎被关闭了(我通过phpMyAdmin进行了检查,一个bash专家可以告诉你其他方法)。在我的情况下,只需要重新启动MySQL就可以解决问题,但如果有什么配置更改的话,你可能需要检查一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接