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


8

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

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

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

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

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

前もって感謝します。


1
MySQLのユーティリティ/ FRMリーダー:mysqlblog.fivefarmers.com/2013/04/09/...drcharlesbell.blogspot.com/2013/04/...

回答:


8

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

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

手順は次のとおりです。1. https://recovery.twindb.com/を開きます。「Recover Structure」をクリックします ここに画像の説明を入力してください

  1. 次のサブメニューで、「。frmファイルから」をクリックします ここに画像の説明を入力してください

  2. 次のビューで[参照]をクリックし、ローカルディスク上の.frmファイルを選択します。「アップロード」をクリックします ここに画像の説明を入力してください

  3. 魔法が効くまで待ちます ここに画像の説明を入力してください

  4. 復元された構造を取得します。 ここに画像の説明を入力してください

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


2
このサイトはもう機能していません。
アンブセルヴァンロッキー

@AnbuselvanRocky Download 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アルファの一部である http://dev.mysql.com/downloads/tools/utilities/。プラットフォームリポジトリまたはソースリポジトリを選択してダウンロードするだけです。

私たちはあなたのコメントを歓迎し、このユーティリティが診断と回復のツールキットを拡張するのに役立つことを願っています。

2013-06-11 14:05 EDT更新

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

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

試してみる !!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.