如何从 FRM 文件中恢复 MySQL 表结构

Ste*_*rke 5 mysql myisam mysql-5.5

我从谷歌搜索中学到的东西:

使用 MyISAM 表,您可以简单地复制 FRM、MYD 和 MYI 文件。在我试图恢复的数据库的文件夹中,只有 FRM 文件和一个“db.opt”文件,所以它们不能是 MyISAM 表。

情况:

我的电脑崩溃了,但数据还在硬盘上。MySQL 5.5.8 服务器与 WAMP 一起安装在崩溃的计算机上。

我试过复制整个数据文件夹,但 MySQL 只创建一个空白数据库 - 没有表。

我希望恢复的每个表都有一个 FRM 文件。但是,它们不是可读的文本文件。有没有办法从这些文件中恢复表结构?

这篇文章/sf/answers/538208191/表明结构实际上在那些文件中,但没有提供检索方法。

非常感谢 - 我已经尝试了我能想到的一切。

Rol*_*DBA 4

如果您只看到 .frm 文件,则很有可能正在使用的存储引擎是 InnoDB,并且默认情况下 innodb_file_per_table 必须已关闭。

如果您将崩溃服务器上的 datadir 中的所有内容转移到另一台计算机上的另一个磁盘上,您也许可以按原样使用该文件夹启动 mysql。

例如,假设 ServerA 是您崩溃的服务器,而 ServerB 是您想要放置它的位置。

  • 在ServerB上安装MySQL 5.5.8
  • net stop mysql在 ServerB 上确保 mysql 在 ServerB 上已关闭
  • md C:\MySQLData在服务器B上
  • 将 ServerA 上的数据文件夹中的所有内容放入 ServerB 上的 C:\MySQLData
  • 将 C:\MySQLData 设为新的数据目录

将其添加到 ServerB 上的 my.ini

[mysql]
datadir=C:/MySQLData
Run Code Online (Sandbox Code Playgroud)
  • C:\> del C:\MySQLData\ib_logfile*在服务器B上
  • net start mysql在服务器B上

请尝试一下并告诉我们发生了什么

更新 2012-02-03 17:06 美国东部时间

既然您能够恢复所有内容,请执行以下操作:

mysqldump -u... -p... -A -d --routines --triggers > C:\MySQLSchema.sql
Run Code Online (Sandbox Code Playgroud)

这将给出 MySQL 实例中的所有表结构。