如何仅从 .frm 文件中提取表架构?

Rel*_*ual 8 mysql innodb schema recovery

我已经从备份中提取了 mysql 的数据目录,需要从旧表中获取模式,但它是来自另一台机器的备份。

我今天已经阅读了大量有关如何执行此操作的教程,但每次似乎都失败了,或者我最终不得不重新安装 mysql,因为 mysql 挂起或崩溃。我尝试了以下方法:

  • 创建不同的数据库
  • 在该数据库中创建同名表
  • 替换文件
  • 停止/启动引擎
  • .frm文件中恢复

我尝试了各种顺序和组合。

是否有任何外部工具可以从.frm文件中提取模式?如果我打开文件,我可以看到列名。我看了一眼,但似乎找不到任何能让我做到这一点的东西。

提前致谢。

Rol*_*DBA 5

我以前回答过这样的问题

我参考了Chris Calendar一篇关于将.ibd文件连接回数据字典的博客

如果你没有.ibdwith .frm,很可能 MySQL 是在关闭innodb_file_per_table 的情况下运行的。请参考那个Feb 03, 2012帖子。如果这是 Linux,请确保您运行

cd /var/lib/mysql
chown -R mysql:mysql *
Run Code Online (Sandbox Code Playgroud)

在启动mysql之前。

试一试 !!!

补充资料

在上一篇博客的底部,它说:

好吧,我上瘾了!我在哪里可以得到它?

.frm 阅读器实用程序是新版本 1.3.0 Alpha 的一部分,可从http://dev.mysql.com/downloads/tools/utilities/单独下载 。只需选择平台存储库或源存储库并下载即可。

我们欢迎您提出意见,并希望此实用程序将有助于扩展您的诊断和恢复工具包。

更新 2013-06-11 14:05 EDT

我有好消息。我安装了 Windows 版本的 MySQL 实用程序。我从命令行测试了 mysqlfrm 程序。我测试了.frm从 mysql 模式中的 user.frm获取信息。这是我得到的:

C:\MySQL_5.6.10\data\mysql>mysqlfrm --server=root:rootpassword@localhost mysql:user.frm --port=3307
# Source on localhost: ... connected.
# Starting the spawned server on port 3307 ... done.
# Reading .frm files
#
# Reading the user.frm file.
#
# CREATE statement for user.frm:
#

CREATE TABLE `mysql`.`user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin DEFAULT '',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

#...done.

C:\MySQL_5.6.10\data\mysql>
Run Code Online (Sandbox Code Playgroud)

真的行。数据库使用端口 3306 在我的台式计算机上运行。我必须将 3307 作为端口来运行衍生进程。

我可以将它.frm从 Linux 机器移到 Windows 机器上并执行相同的操作。

试一试 !!!