MySQL 5.1 リファレンスマニュアル :: 13 ストレージエンジンとテーブルタイプ :: 13.5 InnoDB ストレージ エンジン :: 13.5.3 InnoDB 設定 :: 13.5.3.1 Per-Table テーブルスペースを利用する
« 13.5.3 InnoDB 設定

13.5.3.2 共有テーブルスペースに未加工デバイスを利用する »
Section Navigation      [Toggle]
  • 13.5.3 InnoDB 設定
  • 13.5.3.1 Per-Table テーブルスペースを利用する
  • 13.5.3.2 共有テーブルスペースに未加工デバイスを利用する

13.5.3.1. Per-Table テーブルスペースを利用する

各 InnoDB テーブルとそのインデックスをそれ自体のファイル内に格納する事ができます。この特徴は、実際に各テーブルがそのテーブルスペースを持つ為 「multiple tablespaces」 と呼ばれています。

複数のテーブルスペースを利用する事は、特定のテーブルを別々の物理ディスクに移動したり、単一テーブルのバックアップを残りの InnoDB テーブルの利用を邪魔する事なく、素早く復元したいユーザにとって、有益な物です。

このラインを my.cnf の [mysqld] セクションに追加する事で、複数のテーブルスペースを有効にする事ができます:

[mysqld]
innodb_file_per_table

サーバを再起動した後、InnoDB はテーブルが属するデータベース ディレクトリ内にある、それ自体のファイル tbl_name.ibd 内に、それぞれの新しく作成されたテーブルを格納します。 これは MyISAM ストレージ エンジンが行う事と似ていますが、MyISAM はテーブルをデータ ファイル tbl_name.MYD と インデックス ファイル tbl_name.MYI に分割します。InnoDB には、データとインデックスは .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 TABLE db1.tbl_name TO db2.tbl_name;

もし .ibd の 「空の」 バックアップを持っていれば、それを次のように、それが発生した場所から MySQL インストールに格納する事ができます:

  1. この ALTER TABLE ステートメントを発行してください:

    ALTER TABLE tbl_name DISCARD TABLESPACE;
    

    注意:このステートメントは現在の .ibd ファイルを削除します。

  2. バックアップ .ibd ファイルを正しいデータベース ディレクトリ内に戻してください。

  3. この ALTER TABLE ステートメントを発行してください:

    ALTER TABLE tbl_name IMPORT TABLESPACE;
    

このコンテキスト内で 「空の」 .ibd ファイル バックアップが意味する物は:

  • .ibd ファイル内には、トランザクションによってコミットされていない変更はありません。

  • .ibd ファイル内にマージされていない挿入バッファ エントリはありません。

  • パージは .ibd ファイルから全ての削除マークされたインデックス レコードを削除しました。

  • mysqld は、.ibd ファイルの全ての変更されたページをバッファ プールからファイルにフラッシュしました。

次の方法を利用して、空のバックアップ .ibd ファイルを作る事ができます:

  1. mysqld サーバからの全てのアクティビティを停止して、全てのトランザクションをコミットしてください。

  2. SHOW ENGINE INNODB STATUS がデータベース内にアクティブなトランザクションが無いと表示し、InnoDB のメイン スレッド ステータスが Waiting for server activity となるまで待ってください。すると、.ibd ファイルのコピーを作成する事ができます。

.ibd ファイルの空のコピーを作成する別の方法は、商業 InnoDB Hot Backup ツールを利用する事です:

  1. InnoDB インストールをバック アップする為に InnoDB Hot Backup を利用してください。

  2. 2番目の mysqld サーバをバック アップ上で起動し、その中で .ibd ファイルを掃除させてください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates