このページは機械翻訳したものです。
このセクションでは、一部またはすべての 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 を無効にします。 コミットは、テーブル全体またはテーブルのセグメントをインポートした後にのみ実行します。