各 InnoDB
テーブルとそのインデックスをそれ自体のファイル内に格納することができます。この特徴は、実際に各テーブルがそのテーブル領域を持つため
「multiple tablespaces」 と呼ばれています。
複数のテーブル領域を利用することは、特定のテーブルを別々の物理ディスクに移動したり、単一テーブルのバックアップをほかの
InnoDB
テーブルの利用を邪魔することなく、すばやく復元したいユーザーにとって、有益なものです。
複数のテーブル領域を有効にするには、サーバーの起動時に
--innodb_file_per_table
オプションを指定します。たとえば、my.cnf
の [mysqld]
セクションに次の 1 行を追加します。
[mysqld] innodb_file_per_table
複数のテーブル領域を有効にすると、InnoDB
はテーブルが属するデータベースディレクトリ内にある、それ自体の
ファイルに、それぞれの新しく作成されたテーブルを格納します。これは
tbl_name
.ibdMyISAM
ストレージエンジンが行うことと似ていますが、MyISAM
はテーブルを
データファイルと
tbl_name
.MYD
インデックスファイルに分割します。tbl_name
.MYIInnoDB
には、データとインデックスは
.ibd
ファイル内で一緒に格納されます。
ファイルはまだ通常通り作成されます。
tbl_name
.frm
MyISAM
テーブルファイルで行えるのと同じように、データベースディレクトリ間で
.ibd
ファイルを自由に移動させることはできません。これは、InnoDB
共有テーブル領域内に格納されているテーブル定義がデータベース名を含み、そして
InnoDB
がトランザクション ID
とログシーケンス番号の一貫性を保持しなければいけないためです。
もし
innodb_file_per_table
行を my.cnf
から削除してサーバーを再起動すると、InnoDB
は共有テーブル領域ファイル内にテーブルを再度作成します。
innodb_file_per_table
オプションはテーブル作成だけに影響を与え、既存テーブルにアクセスはしません。もしこのオプションを利用してサーバーを起動すると、新しいテーブルは
.ibd
ファイルを利用して作成されますが、共有テーブル領域内に存在するテーブルにアクセスすることもまだ可能です。このオプションを指定せずにサーバーを起動すると、新しいテーブルは共有テーブル領域内に作成されますが、複数のテーブル領域を利用して作成されたテーブルにもまだアクセスすることができます。
InnoDB
は、共有テーブル領域に内部データ辞書と取り消しログを置くので、いつもそれを必要とします。.ibd
ファイルは InnoDB
の作動に充分ではありません。
1 つのデータベースから別のデータベースに
.ibd
ファイルとその関連テーブルを移動するには、RENAME
TABLE
ステートメントを利用してください:
RENAME TABLEdb1.tbl_name
TOdb2.tbl_name
;
もし .ibd
の
「空の」
バックアップを持っていれば、それを次のように、それが発生した場所から
MySQL インストールに格納することができます:
次の ALTER
TABLE
ステートメントを発行して現在の
.ibd
ファイルを削除します。
ALTER TABLE tbl_name
DISCARD TABLESPACE;
バックアップ .ibd
ファイルを適切なデータベースディレクトリにコピーします。
次の ALTER
TABLE
ステートメントを発行することで、このテーブルで新しい
.ibd
ファイルを使用するよう
InnoDB
に指示します。
ALTER TABLE tbl_name
IMPORT TABLESPACE;
この文脈における 「クリーン」 な
.ibd
バックアップファイルとは、次の要件を満たすファイルのことです。
.ibd
ファイル内には、トランザクションによってコミットされていない変更はありません。
.ibd
ファイル内にマージされていない挿入バッファーエントリはありません。
パージは .ibd
ファイルからすべての削除マークされたインデックスレコードを削除しました。
mysqld
は、.ibd
ファイルのすべての変更されたページをバッファープールからファイルにフラッシュしました。
次の方法を利用して、空のバックアップ
.ibd
ファイルを作ることができます:
mysqld サーバーからのすべてのアクティビティーを停止して、すべてのトランザクションをコミットしてください。
SHOW
ENGINE INNODB STATUS
がデータベース内にアクティブなトランザクションがないと表示し、InnoDB
のメインスレッドステータスが
Waiting for server
activity
となるまで待ってください。すると、.ibd
ファイルのコピーを作成することができます。
.ibd
ファイルの空のコピーを作成する別の方法は、商業
InnoDB Hot Backup
ツールを利用することです:
InnoDB
インストールをバックアップするために
InnoDB Hot Backup
を利用してください。
2 番目の mysqld
サーバーをバックアップ上で起動し、その中で
.ibd
ファイルを掃除させてください。