FRM ファイル形式とは?
.frm ファイルは、単一のデータベーステーブルの構造とレイアウトに関する情報を保存する MySQL テーブル定義ファイルです。テーブルごとに1つの .frm ファイルが作成され、テーブル名が .frm のファイル名として使用されます。例えば、orders という名前のテーブルは、MySQL データディレクトリ内に orders.frm を生成します。
.frm 形式は、テーブルスキーマ(列名、データ型、長さ、デフォルト値、インデックス/キーのメタデータ)のみを記録します。行データが保持されることはありません。MyISAM テーブルの場合、実際のデータは対になる .MYD ファイル に保存され(インデックスは .MYI ファイル に保存されます)、MySQL が MyISAM テーブルに完全にアクセスするには、これら3つのファイルがすべて揃っている必要がありました。InnoDB テーブルでは、.frm は個別の .IBD テーブルスペースファイル とペアになります。
このファイルは、マジックバイト 0xFE 0x01 で始まる独自のリトルエンディアン・バイナリ・ブロブです。1995年の MySQL 1.0 で導入され、MySQL 5.7 および MariaDB に至るまで、MyISAM や InnoDB を含むすべてのストレージエンジンで使用されてきました。MySQL 8.0(2018年12月)では .frm ファイルが完全に廃止され、テーブルメタデータは InnoDB のトランザクションデータ辞書に移行されました。MariaDB は、この分岐後も .frm ファイルの使用を継続しています。
行データが紛失または破損した場合でも、残っている .frm ファイルを mysqlfrm 診断ユーティリティで検査することで、CREATE TABLE 文を再構築し、列のレイアウトを復元することが可能です。
セキュリティと安全性
リスク: LOW.frm ファイルは受動的なバイナリ・テーブル・メタデータです。実行コードは含まれておらず、取り扱いは安全です。実用上のリスクはマルウェアではなくデータ復元に関するものです。誤った MySQL バージョンに .frm を復元すると、失敗したり辞書が破損したりする可能性があります。また、.MYD/.ibd ファイルがない .frm 単体では行データを復元できません。常にコピーで作業し、元のサーバーバージョンと一致させ、関連するデータファイルをセットで保管してください。
形式の詳細
概要- Visual Basic フォームファイル - VB6 以前におけるフォームのレイアウトとコントロールを記述するソースファイル(プレーンテキスト)。
- FormFlow フォーム - レガシーな JetForm/FormFlow ソフトウェアで作成された電子フォームドキュメント。
- Adobe FrameMaker (レガシー) - 古い FrameMaker のインストール環境で、一部のフォーム/テンプレートリソースに .frm が使用されていました。
FRM ファイルを開くプログラム
mysqlfrm --diagnostic table.frm を実行して、実行中のサーバーなしでファイルから直接 CREATE TABLE 文を読み取ります。 mysqlfrm --diagnostic table.frm を実行して、実行中のサーバーなしでファイルから直接 CREATE TABLE 文を読み取ります。 技術的詳細
詳細仕様| ファイル構造 | 独自の小端(リトルエンディアン)バイナリ・ブロブ。圧縮や暗号化なし |
| マジックバイト | オフセット 0 に 0xFE 0x01(バージョン依存のバイナリヘッダー。固定の ASCII シグネチャなし) |
| 内容 | 列定義(名前、型、長さ、デフォルト値)、インデックス/キーのメタデータ、テーブルオプション。スキーマのみで行データは含まない |
| 一般的なファイルサイズ | 1テーブルあたり 1 KB - 50 KB。列やインデックスの数に応じて増加 |
| MIME タイプ | application/octet-stream |
| 1テーブルにつき1ファイル | 各テーブルはテーブル名に基づいた独自の .frm ファイルを持ち、MySQL データディレクトリ内のスキーマ用サブディレクトリに保存される |
| MyISAM の関連ファイル | .MYD(行データ)および .MYI(インデックスデータ)。MyISAM テーブルへの完全なアクセスには3つすべてが必要 |
| InnoDB の関連ファイル | .ibd テーブルスペースファイル。 .frm がスキーマを保持し、.ibd がデータとインデックスを保持していた |
| 対応エンジン | MySQL 3.x - 5.7 におけるすべてのストレージエンジン:MyISAM、InnoDB、MEMORY、CSV、ARCHIVE など |
| 廃止バージョン | MySQL 8.0 (2018年12月):メタデータが InnoDB トランザクションデータ辞書に移動。 .frm ファイルの作成・読み取りは行われない |
| 継続使用 | MariaDB は MySQL 8.0 との分岐後も .frm ファイルの生成を継続 |
| 復元ユーティリティ | mysqlfrm (MySQL Utilities) は、スタンドアロンの .frm を読み取って CREATE TABLE DDL 文を再構築する |
| 開発元 | MySQL AB(オリジナル)、Oracle Corporation(2010年の買収以降) |
| オペレーティングシステム | クロスプラットフォーム:Linux、Windows、macOS、FreeBSD など、MySQL または MariaDB が動作する環境 |
| リリース日 | 1995 (MySQL 1.0, used by ISAM/MyISAM/InnoDB through MySQL 5.7) |
| 最新バージョン | Last used in MySQL 5.7 / MariaDB; removed from MySQL 8.0 (December 2018) |
| 仕様書 | dev.mysql.com |
FRM の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。FRM ファイルについて最初の質問をしてみましょう。
よくある質問
.frm ファイルを開くにはどうすればよいですか?
mysqlfrm --diagnostic table.frm を使用してスキーマを読み取るか、テーブルファイルを一致する MySQL/MariaDB サーバーのデータディレクトリに配置して SHOW CREATE TABLE を実行してください。バイナリをテキストエディタで直接開いても文字化けが表示されるだけです。.frm ファイルだけでデータを復元できますか?
.frm から CREATE TABLE 文を取得するにはどうすればよいですか?
mysqlfrm --diagnostic yourtable.frm を実行するか、ファイルを MySQL/MariaDB サーバーに復元して SHOW CREATE TABLE を実行します。