MySQL 8.0 リファレンスマニュアル


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

15.6.1.4 InnoDB テーブルの移動またはコピー

このセクションでは、一部またはすべての 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 インストールにリストアできます。

  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 などのユーティリティを使用して論理バックアップを実行できます。これにより、別の SQL サーバーに転送するために元のデータベースオブジェクト定義およびテーブルデータを再現するために実行できる一連の SQL ステートメントが生成されます。 この方式を使用すれば、形式が異なっているかどうかや、テーブルに浮動小数点データが含まれているかどうかは関係ありません。

この方法のパフォーマンスを向上させるには、データのインポート時に autocommit を無効にします。 コミットは、テーブル全体またはテーブルのセグメントをインポートした後にのみ実行します。


関連キーワード:  InnoDB, テーブル, バックアップ, 構成, コピー, スペース, データベース, 圧縮, サーバー, インデックス