Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  別のマシンへの InnoDB テーブルの移動またはコピー

14.6.2 別のマシンへの InnoDB テーブルの移動またはコピー

このセクションでは、一部またはすべての InnoDB テーブルを別のサーバーに移動またはコピーするための方法について説明します。たとえば、MySQL インスタンス全体をより大規模で高速なサーバーに移動したり、MySQL インスタンス全体のクローンを新しいレプリケーションスレーブサーバーに作成したり、アプリケーションを開発およびテストするために各テーブルを別のサーバーにコピーしたり、レポートを生成するためにデータウェアハウスサーバーにコピーしたりする場合があります。

InnoDB テーブルを移動またはコピーするための方法は、次のとおりです。

小文字の名前を使用したプラットフォーム間の移動またはコピー

Windows 上の InnoDB では常に、データベース名およびテーブル名が内部的に小文字で格納されます。バイナリ形式のデータベースを Unix から Windows に、または Windows から Unix に移動するには、すべてのデータベースおよびテーブルを小文字の名前を使用して作成します。これを実現する便利な方法は、データベースやテーブルを作成する前に、my.cnf または my.ini ファイルの [mysqld] セクションに次の行を追加することです。

[mysqld]
lower_case_table_names=1

トランスポータブルテーブルスペース

MySQL 5.6.6 で導入されたトランスポータブルテーブルスペース機能では、あるサーバーインスタンスから別のサーバーインスタンスにコピーするように InnoDB を準備する際に、FLUSH TABLES ... FOR EXPORT が使用されます。この機能を使用するには、各 InnoDB テーブルが独自のテーブルスペースを持つように、innodb_file_per_tableON に設定した状態で InnoDB テーブルを作成する必要があります。使用法については、セクション14.5.5「テーブルスペースの別のサーバーへのコピー (トランスポータブルテーブルスペース)」を参照してください。

MySQL Enterprise Backup

MySQL Enterprise Backup 製品を使用すると、実行中の MySQL データベース (InnoDB および MyISAM テーブルを含む) を、データベースの整合性のあるスナップショットを生成しながら、操作の中断を最小限に抑えてバックアップできます。MySQL Enterprise Backup が InnoDB テーブルをコピーしている間は、InnoDB テーブルと MyISAM テーブルの両方に対する読み取りと書き込みを続行できます。MyISAM およびその他の InnoDB 以外のテーブルのコピー中は、これらのテーブルに対する (書き込みではなく) 読み取りが許可されます。さらに、MySQL Enterprise Backup では、圧縮バックアップファイルを作成したり、InnoDB テーブルのサブセットをバックアップしたりすることもできます。MySQL のバイナリログと組み合わせると、ポイントインタイムリカバリを実行できます。MySQL Enterprise Backup は、MySQL Enterprise サブスクリプションの一部として含まれています。

MySQL Enterprise Backup についての詳細は、セクション25.2「MySQL Enterprise Backup」を参照してください。

データファイルのコピー (コールドバックアップ方式)

単に、セクション14.16「InnoDB のバックアップとリカバリ」の「コールドバックアップ」で一覧表示した関連ファイルをすべてコピーするだけで、InnoDB データベースを移動できます。

MyISAM データファイルと同様に、InnoDB のデータファイルとログファイルにも、同じ浮動小数点数形式を持つすべてのプラットフォーム上でのバイナリ互換性があります。浮動小数点形式が異なっている場合でも、テーブル内で FLOAT または DOUBLE データ型を使用していなければ、手順は同じです。単に、関連するファイルをコピーするだけです。

.ibd ファイルの移植性に関する考慮事項

.ibd ファイルを移動またはコピーする際は、ソースシステムと宛先システムでデータベースディレクトリ名を同じにする必要があります。データベース名は、InnoDB の共有テーブルスペース内に格納されているテーブル定義に含まれています。テーブルスペースファイル内に格納されているトランザクション ID およびログシーケンス番号も、データベース間で異なります。

あるデータベースから別のデータベースに .ibd ファイルとそれに関連付けられたテーブルを移動するには、RENAME TABLE ステートメントを使用します。

RENAME TABLE db1.tbl_name TO db2.tbl_name;

.ibd ファイルのクリーンなバックアップがある場合は、次のように、そのバックアップが生成された MySQL インストールにリストアできます。

  1. .ibd ファイルをコピーすると、テーブルスペース内に格納されたテーブル ID が変更されるため、それ以降はテーブルの削除または切り捨ては実行されなかったはずです。

  2. 次の ALTER TABLE ステートメントを発行して、現在の .ibd ファイルを削除します。

    ALTER TABLE tbl_name DISCARD TABLESPACE;
  3. バックアップ .ibd ファイルを適切なデータベースディレクトリにコピーします。

  4. 次の ALTER TABLE ステートメントを発行して、このテーブルで新しい .ibd ファイルを使用するように InnoDB に指示します。

    ALTER TABLE tbl_name IMPORT TABLESPACE;
    注記

    ALTER TABLE ... IMPORT TABLESPACE 機能は、インポートされたデータに対して外部キー制約を課しません。

このコンテキストでは、クリーンな .ibd バックアップファイルとは、次の要件を満たすファイルです。

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

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

  • パージによって、.ibd ファイルから削除マークが付けられたすべてのインデックスレコードが削除されました。

  • mysqld によって、.ibd ファイルの変更されたページがすべてバッファープールからファイルにフラッシュされました。

次の方法を使用すると、クリーンなバックアップ .ibd ファイルを作成できます。

  1. mysqld サーバーからのすべてのアクティビティーを停止し、すべてのトランザクションをコミットします。

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

.ibd ファイルのクリーンなコピーを作成するためのもう 1 つの方法は、MySQL Enterprise Backup 製品を使用することです。

  1. MySQL Enterprise Backup を使用して、InnoDB インストールをバックアップします。

  2. 2 番目の mysqld サーバーをバックアップ上で起動します。そのサーバーで、バックアップ内の .ibd ファイルがクリーンアップされます。

エクスポートとインポート (mysqldump)

mysqldump を使用すると、あるマシン上でテーブルをダンプしてから、別のマシン上でそのダンプファイルをインポートできます。この方式を使用すれば、形式が異なっているかどうかや、テーブルに浮動小数点データが含まれているかどうかは関係ありません。

インポートトランザクションで生成される巨大なロールバックセグメント用の領域がテーブルスペースに十分にあると仮定すれば、この方式のパフォーマンスを向上させる方法の 1 つは、データのインポート時に自動コミットモードをオフにすることです。コミットは、テーブル全体またはテーブルのセグメントをインポートしたあとでのみ行なってください。


User Comments
Sign Up Login You must be logged in to post a comment.