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


8

我已经从备份中提取了mysql的数据目录,并且需要从旧表中获取架构,但是它是来自另一台计算机的备份。

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

  • 创建一个不同的数据库
  • 在该数据库中创建具有相同名称的表
  • 替换档案
  • 停止/启动引擎
  • .frm文件中恢复

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

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

提前致谢。


Answers:


8

在TwinDB中,我们构建了一个Web界面mysqlfrm。它是免费且易于使用的。

要从中恢复表结构,只需上传.frm文件。

这是步骤。1.打开https://recovery.twindb.com/。点击“恢复结构” 在此处输入图片说明

  1. 在下一个子菜单中,单击“来自.frm文件” 在此处输入图片说明

  2. 在下一个视图上,单击“浏览”,然后在本地磁盘上选择一个.frm文件。点击“上传” 在此处输入图片说明

  3. 等到它神奇为止 在此处输入图片说明

  4. 获取恢复的结构。 在此处输入图片说明

也可以上传包含一堆.frm文件的档案。该站点将完全恢复它们。


2
该站点不再起作用。
Anbuselvan Rocky

@AnbuselvanRocky下载mysqlfrm(我下载了版本1.6.5),然后运行它mysqlfrm --diagnostic /path/to/my_table.frm
MyTitle

5

我之前已经回答过这样的问题

我已经引用了Chris Calendar博客,内容涉及将.ibd文件连接回数据字典。

如果你不具备.ibd沿.frm,机会是MySQL的用流水innodb_file_per_table关闭。请参阅该Feb 03, 2012帖子。如果是Linux,请确保您运行

cd /var/lib/mysql
chown -R mysql:mysql *

在启动mysql之前。

试试看 !!!

补充信息

在最后一个博客的底部,它说:

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

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

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

更新2013-06-11 14:05 EDT

我有好消息。我安装了Windows版本的MySQL Utilities。我从命令行测试了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>

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

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

试试看 !!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.