web-dev-qa-db-ja.com

.frmファイルだけからテーブルスキーマを抽出するにはどうすればよいですか?

Mysqlのデータディレクトリをバックアップから抽出し、古いテーブルからスキーマを取得する必要がありますが、それは別のマシンからのバックアップです。

今日、これを行う方法について多くのチュートリアルを読みましたが、失敗するように見えるたび、またはmysqlがハングまたはクラッシュするためにmysqlを再インストールしなければならなくなりました。私は以下を試しました:

  • 別のデータベースを作成する
  • そのデータベースに同じ名前のテーブルを作成する
  • ファイルを置き換える
  • エンジンの停止/開始
  • .frmファイルから回復

いろいろな順番や組み合わせで試してみました。

.frmファイルからスキーマを抽出できる外部ツールはありますか?ファイルを開くと、列名が表示されます。私は一見したが、これを可能にする何かを見つけることができないようです。

前もって感謝します。

8
Relequestual

TwinDBでは、mysqlfrmへのWebインターフェイスを構築しました。それは無料で使いやすいです。

テーブル構造を回復するには、.frmファイルをアップロードするだけです。

手順は次のとおりです。 1. https://recovery.twindb.com/ を開きます。 「Recover Structure」をクリック enter image description here

  1. 次のサブメニューで、「。frmファイルから」をクリックします enter image description here

  2. 次のビューで[参照]をクリックし、ローカルディスク上の.frmファイルを選択します。 「アップロード」をクリック enter image description here

  3. 魔法が効くまで待ちます enter image description here

  4. 復元された構造を取得します。 enter image description here

一連の.frmファイルを含むアーカイブをアップロードすることもできます。サイトはそれらを完全に回復します。

8
akuzminsky

私は以前にこのような質問に答えました

.ibdファイルをデータディクショナリに接続する際に Chris Calendarのブログ を参照しました。

.ibd.frmがない場合、MySQLが innodb_file_per_table offで実行されている可能性があります。 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更新

良いお知らせがあります。 MySQLユーティリティのWindowsバージョンをインストールしました。 mysqlfrmプログラムをコマンドラインからテストしました。 mysqlスキーマのuser.frmから.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を指定する必要がありました。

LinuxボックスからWindowsマシンに.frmを移動して、同じことを行うことができます。

試してみる !!!

5
RolandoMySQLDBA