各 InnoDB
テーブルとそのインデックスをそれ自体のファイル内に格納する事ができます。この特徴は、実際に各テーブルがそのテーブルスペースを持つ為
「multiple tablespaces」 と呼ばれています。
複数のテーブルスペースを利用する事は、特定のテーブルを別々の物理ディスクに移動したり、単一テーブルのバックアップを残りの
InnoDB
テーブルの利用を邪魔する事なく、素早く復元したいユーザにとって、有益な物です。
このラインを my.cnf
の
[mysqld]
セクションに追加する事で、複数のテーブルスペースを有効にする事ができます:
[mysqld] innodb_file_per_table
サーバを再起動した後、InnoDB
はテーブルが属するデータベース
ディレクトリ内にある、それ自体のファイル
内に、それぞれの新しく作成されたテーブルを格納します。
これは tbl_name
.ibdMyISAM
ストレージ
エンジンが行う事と似ていますが、MyISAM
はテーブルをデータ ファイル
と
インデックス ファイル
tbl_name
.MYD
に分割します。tbl_name
.MYIInnoDB
には、データとインデックスは
.ibd
ファイル内で一緒に格納されます。
ファイルはまだ通常通り作成されます。
tbl_name
.frm
もし innodb_file_per_table
ラインを
my.cnf
から削除してサーバを再起動すると、InnoDB
は共有テーブルスペース
ファイル内にテーブルを再度作成します。
innodb_file_per_table
はテーブル作成だけに影響を与え、既存テーブルにアクセスはしません。もしこのオプションを利用してサーバを起動すると、新しいテーブルは
.ibd
ファイルを利用して作成されますが、共有テーブルスペース内に存在するテーブルにアクセスする事もまだ可能です。もしオプションを削除してサーバを再起動すると、新しいテーブルは共有テーブルスペース内に作成されますが、複数のテーブルスペースを利用して作成されたテーブルにもまだアクセスする事ができます。
注意:InnoDB
は、共有テーブルスペースに内部データ
ディレクトリと取り消しログを置くので、いつもそれを必要とします。.ibd
ファイルは InnoDB
の作動に充分ではありません。
注意:MyISAM
テーブル
ファイルで行えるのと同じように、データベース
ディレクトリ間で .ibd
ファイルを自由に移動させる事はできません。これは、InnoDB
共有テーブルスペース内に格納されているテーブル定義がデータベース名を含み、そして
InnoDB
がトランザクション ID
とログ
シーケンス番号の一貫性を保持しなければいけない為です。
1つのデータベースから別のデータベースに
.ibd
ファイルとその関連テーブルを移動するには、RENAME
TABLE
ステートメントを利用してください:
RENAME TABLEdb1.tbl_name
TOdb2.tbl_name
;
もし .ibd
の 「空の」
バックアップを持っていれば、それを次のように、それが発生した場所から
MySQL インストールに格納する事ができます:
この ALTER TABLE
ステートメントを発行してください:
ALTER TABLE tbl_name
DISCARD TABLESPACE;
注意:このステートメントは現在の
.ibd
ファイルを削除します。
バックアップ .ibd
ファイルを正しいデータベース
ディレクトリ内に戻してください。
この ALTER TABLE
ステートメントを発行してください:
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
ファイルを掃除させてください。