私は .frm (SQL データ ファイル) をテキスト ファイルに変換しようとしています。その理由は、SQL エンジンが「舞台裏で」どのようにデータを保存するかを確認したいからです。たとえば、「ENUM」SQL ストレージを使用する場合、「INDEX」と呼ばれる「INTEGER」が使用されます。.frm を .txt に変換するソフトウェアまたは方法をご存知の方がいらっしゃいましたら、どうぞよろしくお願いいたします。良い一日をお過ごしください。
答え1
この記事では、実証済みの方法を紹介します。
これを実行する方法の基本はそれほど難しくありませんが、細かい部分が厄介です。この問題の最初の部分は、.frm ファイルからテーブル定義を抽出する方法です。この問題の 2 番目の部分については、別の投稿で説明します。.frm ファイルを読み込んで解析し、テーブル定義を出力するプログラムを作成することもできますが、これは大変な作業です。特に、MySQL にそれを実行させることができる場合はなおさらです。ファイル foo.frm でこれを行う方法は次のとおりです。
mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;
foo という InnoDB テーブルを作成しました。MySQL は $datadir/test に foo.frm および foo.ibd ファイルを書き込みました。また、データ ディクショナリにこのテーブルのレコードを作成しました。
mysql> FLUSH TABLES;
これにより、MySQL は開いているテーブルをすべて閉じ、クエリ キャッシュをフラッシュします。これは、作成したテーブル「foo」を MySQL に強制的に忘れさせるためです。
bash# cp foo.frm /var/lib/mysql/test;
test.foo のテーブル定義を上書きしました。これは、MySQL がまだ実行されている間にホット モードで実行されました。
mysql> SHOW CREATE TABLE `test`.`foo`;
これにより、先ほどテスト ディレクトリにコピーした foo.frm ファイルのテーブル定義が出力されます。.frm ファイル内の情報はシステム テーブル スペース内の情報と一致しない可能性が高いため、MySQL はおそらく少し混乱するでしょう。エラー ログには次のようなメッセージが表示される可能性があります。
[エラー] テーブル ./test/foo には InnoDB データ ディクショナリに主キーがありませんが、MySQL にはあります。テーブルを MySQL バージョン 3.23.54 未満で作成し、主キーを定義せずに、すべての列が NULL でない一意のキーを定義した場合、MySQL は内部的にそのキーを主キーとして扱います。このエラーは、テーブルをダンプ + DROP + CREATE + 再インポートすることで修正できます。
でも大丈夫です、ただ掃除するだけです。
mysql> DROP TABLE `test`.`foo`;
数百のテーブルに対してこの操作を実行する煩わしさを回避するには、次の場所で提供されているスクリプトを使用します。ブルーゲッコーの記事。あなたは整理されるはずです。チャグバート。