このセクションでは、一部またはすべての InnoDB
テーブルを別のサーバーまたはインスタンスに移動またはコピーする方法について説明します。 たとえば、MySQL インスタンス全体をより大きい高速なサーバーに移動したり、MySQL インスタンス全体を新しいレプリカサーバーにクローニングしたり、個々のテーブルを別のインスタンスにコピーしてアプリケーションを開発およびテストしたり、データウェアハウスサーバーにコピーしてレポートを生成したりできます。
Windows 上の InnoDB
では常に、データベース名およびテーブル名が内部的に小文字で格納されます。 バイナリ形式のデータベースを Unix から Windows に、または Windows から Unix に移動するには、すべてのデータベースおよびテーブルを小文字の名前を使用して作成します。 これを実現する便利な方法は、データベースやテーブルを作成する前に、my.cnf
または my.ini
ファイルの [mysqld]
セクションに次の行を追加することです。
[mysqld]
lower_case_table_names=1
サーバーの初期化時に使用された設定とは異なる lower_case_table_names
設定でサーバーを起動することは禁止されています。
InnoDB
テーブルを移動またはコピーするための方法は、次のとおりです。
テーブルのインポート
file-per-table テーブルスペースに存在するテーブルは、別の MySQL サーバーインスタンスから、またはトランスポータブルテーブルスペース機能を使用してバックアップからインポートできます。 セクション15.6.1.3「InnoDB テーブルのインポート」を参照してください。
MySQL Enterprise Backup
MySQL Enterprise Backup 製品を使用すると、操作の中断を最小限に抑えながら、実行中の MySQL データベースをバックアップし、データベースの一貫したスナップショットを生成できます。 MySQL Enterprise Backup がテーブルをコピーしている場合、読取りおよび書込みを続行できます。 また、MySQL Enterprise Backup では、圧縮バックアップファイルを作成し、テーブルのサブセットをバックアップできます。 MySQL のバイナリログと組み合わせると、ポイントインタイムリカバリを実行できます。 MySQL Enterprise Backup は、MySQL Enterprise サブスクリプションの一部として含まれています。
MySQL Enterprise Backup についての詳細は、セクション30.2「MySQL Enterprise Backup の概要」を参照してください。
データファイルのコピー (コールドバックアップ方式)
単に、セクション15.18.1「InnoDB バックアップ」の「コールドバックアップ」で一覧表示した関連ファイルをすべてコピーするだけで、InnoDB
データベースを移動できます。
InnoDB
のデータファイルとログファイルは、同じ浮動小数点数形式を持つすべてのプラットフォームでバイナリ互換です。 浮動小数点形式が異なっている場合でも、テーブル内で FLOAT
または DOUBLE
データ型を使用していなければ、手順は同じです。単に、関連するファイルをコピーするだけです。
file-per-table .ibd
ファイルを移動またはコピーする場合、データベースディレクトリ名はソースシステムと宛先システムで同じである必要があります。 データベース名は、InnoDB
の共有テーブルスペース内に格納されているテーブル定義に含まれています。 テーブルスペースファイル内に格納されているトランザクション ID およびログシーケンス番号も、データベース間で異なります。
あるデータベースから別のデータベースに .ibd
ファイルとそれに関連付けられたテーブルを移動するには、RENAME TABLE
ステートメントを使用します。
RENAME TABLE db1.tbl_name TO db2.tbl_name;
.ibd
ファイルの「クリーンな」バックアップがある場合は、次のように、そのバックアップが生成された MySQL インストールにリストアできます。
.ibd
ファイルをコピーすると、テーブルスペース内に格納されたテーブル ID が変更されるため、それ以降はテーブルの削除または切り捨ては実行されなかったはずです。-
次の
ALTER TABLE
ステートメントを発行して、現在の.ibd
ファイルを削除します。ALTER TABLE tbl_name DISCARD TABLESPACE;
バックアップ
.ibd
ファイルを適切なデータベースディレクトリにコピーします。-
次の
ALTER TABLE
ステートメントを発行して、このテーブルで新しい.ibd
ファイルを使用するようにInnoDB
に指示します。ALTER TABLE tbl_name IMPORT TABLESPACE;
注記ALTER TABLE ... IMPORT TABLESPACE
機能は、インポートされたデータに対して外部キー制約を課しません。
このコンテキストでは、「クリーンな」 .ibd
バックアップファイルとは、次の要件を満たすファイルです。
.ibd
ファイル内には、トランザクションによってコミットされていない変更はありません。.ibd
ファイル内にマージされていない挿入バッファーエントリはありません。パージによって、
.ibd
ファイルから削除マークが付けられたすべてのインデックスレコードが削除されました。mysqld によって、
.ibd
ファイルの変更されたページがすべてバッファープールからファイルにフラッシュされました。
次の方法を使用すると、クリーンなバックアップ .ibd
ファイルを作成できます。
mysqld サーバーからのすべてのアクティビティーを停止し、すべてのトランザクションをコミットします。
SHOW ENGINE INNODB STATUS
でデータベース内にアクティブなトランザクションがないことが表示され、InnoDB
のメインスレッドステータスが「Waiting for server activity」
になるまで待機します。 これにより、.ibd
ファイルのコピーを作成できるようになります。
.ibd
ファイルのクリーンなコピーを作成するためのもう 1 つの方法は、MySQL Enterprise Backup 製品を使用することです。
MySQL Enterprise Backup を使用して、
InnoDB
インストールをバックアップします。2 番目の mysqld サーバーをバックアップ上で起動します。そのサーバーで、バックアップ内の
.ibd
ファイルがクリーンアップされます。
論理バックアップからのリストア
mysqldump などのユーティリティを使用して論理バックアップを実行できます。これにより、別の SQL サーバーに転送するために元のデータベースオブジェクト定義およびテーブルデータを再現するために実行できる一連の SQL ステートメントが生成されます。 この方式を使用すれば、形式が異なっているかどうかや、テーブルに浮動小数点データが含まれているかどうかは関係ありません。
この方法のパフォーマンスを向上させるには、データのインポート時に autocommit
を無効にします。 コミットは、テーブル全体またはテーブルのセグメントをインポートした後にのみ実行します。