IBD ファイル形式とは?
拡張子 .ibd を持つファイルは、テーブルの行、クラスタ化インデックス、セカンダリインデックスを含む MySQL InnoDB データベーステーブルデータ を格納します。MySQL 5.6 以降のデフォルトである «file-per-table» モードでは、各 .ibd ファイルが 1 つのテーブルのデータとインデックスを保持し、ファイル名はテーブル名に対応します。以前の構成では、複数のテーブルとインデックスで共有テーブルスペースを使用することが可能で、各テーブルスペースは一意の ID 番号で識別されていました。
.ibd ファイルは固定サイズの ページ で構成されており、デフォルトは 16 KB です(作成時に 4 KB から 64 KB まで設定可能)。フォーマットはバイナリ形式で、定義された役割を持ついくつかのページタイプに分かれています:
FSP_HDR/ ヘッダーページ - ページ 0。テーブルスペースのヘッダーとメタデータが含まれます。INDEXページ - テーブルの行(主キーでクラスタ化)とセカンダリインデックスのエントリを保持する B-tree ページです。XDES PAGE- エクステント記述子ページ。エクステントページの内容を記述します。INODE PAGE- ファイルセグメント情報を含むページです。
.ibd ファイルは複雑な内部構造を持っているため、専用のデータベースツールを使用して開く必要があります。このフォーマットは、オプションの透過的 暗号化(MySQL 5.7 以降で利用可能な AES ベースの InnoDB TDE)およびオプションのページレベル圧縮(ROW_FORMAT=COMPRESSED または透過的ページ圧縮)をサポートしています。各ページには、整合性検証のためのページごとの CRC32 チェックサムが含まれています。
MySQL 8.0 以降、テーブルスキーマ(シリアル化された辞書情報、SDI)が .ibd に直接埋め込まれるようになり、MySQL 5.7 以前で必要だった個別の .frm ファイルが不要になりました。.ibd フォーマットは MariaDB や Percona Server でもサポートされています。
サーバー間で .ibd データをインポートするには、付随する .cfg メタデータファイル(テーブルスペースが暗号化されている場合は .cfp ファイルも)を一緒にインポートする必要があります。
セキュリティと安全性
リスク: MEDIUM.ibd は不活性なデータであり、実行されることはありませんが、運用上およびプライバシー上の実質的なリスクを伴います。運用面では、MySQL サーバーの実行中に .ibd ファイルをコピー、移動、または削除しないでください。また、異なるサーバーバージョンの .ibd ファイルを混ぜたり、システムテーブルスペース (ibdata1) や redo ログなしで使用したりしないでください。これを行うとテーブルが破損したりサーバーがクラッシュしたりします。移動するためのサポートされている方法はトランスポータブル・テーブルスペースです。プライバシー面では、.ibd にはテーブルの実際の行がディスク上にプレーンテキストで含まれているため(TDE 暗号化が有効でない限り)、.ibd の流出はデータ漏洩を意味します。本番環境の .ibd ファイルは、ユーザーレコード、資格情報、または個人情報 (PII) をさらす可能性があります。機密性の高いデータベースとして取り扱い、保管してください。
形式の詳細
概要IBD ファイルを開くプログラム
技術的詳細
詳細仕様| デフォルトのページサイズ | 16 KB。テーブルスペース作成時に innodb_page_size を介して 4 KB、8 KB、32 KB、または 64 KB に設定可能 |
| バイト順序 | ビッグエンディアン - すべてのマルチバイト整数はディスク上にビッグエンディアン順で格納される |
| ファイルフォーマットのバリアント | Antelope(REDUNDANT/COMPACT 行フォーマット、MySQL ≤5.7)または Barracuda(DYNAMIC/COMPRESSED、MySQL 5.7+) |
| ページヘッダー/トレーラー | 各ページには、ページ本体を囲む 38 バイトの FIL ヘッダーと 8 バイトの FIL トレーラーがある |
| ファイルシグネチャ | 固定のマジックバイトなし。最初のページは FSP_HDR(FIL ヘッダーの 24-25 バイト目がタイプ 0x0008) |
| ページごとのチェックサム | デフォルトで CRC32(MySQL 5.6 以降)。InnoDB レガシーまたはなしもサポート - 値は FIL ヘッダーとトレーラーに格納される |
| インデックス構造 | 主キーでクラスタ化された B+ tree。セカンダリインデックスは直接の行ポインタではなく主キー参照を格納する |
| エクステントサイズ | 1 MB(連続する 64 個の 16 KB ページ)。テーブルスペースは一度に 1 エクステントずつ拡張される |
| 暗号化 | AES-256 InnoDB 透過的データ暗号化 (TDE)、ページごとのキーラッピング。MySQL 5.7 および MariaDB 10.1 で導入 |
| 圧縮 | ROW_FORMAT=COMPRESSED はページレベルで zlib を使用(Barracuda フォーマット)。透過的ページ圧縮はファイルシステムのホールパンチングを使用 |
| オーバーフロー・ストレージ | ページ内のしきい値を超える列値は、同じテーブルスペース内の専用のオフページ BLOB/オーバーフローページに溢れる |
| スキーマの保存 | MySQL 8.0+ はテーブルスペース内に SDI (Serialized Dictionary Information) を埋め込む。MySQL 5.7 以前は別の .frm ファイルにスキーマを保存 |
| サポートされる行フォーマット | REDUNDANT, COMPACT (Antelope); DYNAMIC (MySQL 5.7 以降のデフォルト), COMPRESSED (Barracuda) |
| ページ断裂保護 | ダブルライトバッファにより、各 16 KB ページを最終的なテーブルスペースの場所に書き込む前に専用領域に書き込み、部分的な書き込みから保護する |
| MIME タイプ | application/octet-stream (フォーマット固有の MIME タイプは登録されていない) |
| 開発元 | Oracle Corporation (InnoDB エンジン。元は Innobase Oy、2005年に Oracle が買収) |
| リリース日 | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| 最新バージョン | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| 仕様書 | dev.mysql.com |
IBD の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。IBD ファイルについて最初の質問をしてみましょう。