レプリケーションを使用した MySQL DB インスタンスからのデータのエクスポート - Amazon Relational Database Service

レプリケーションを使用した MySQL DB インスタンスからのデータのエクスポート

MySQL 5.6 以降の DB インスタンスから Amazon RDS の外部で実行されている MySQL インスタンスにデータをエクスポートするには、レプリケーションを使用できます。このシナリオでは、Amazon RDS MySQL DB インスタンスはソース MySQL DB インスタンスであり、Amazon RDS 外部で実行されている MySQL インスタンスは外部 MySQL データベースです。

ソース MySQL DB インスタンスは、バージョン 5.6.13 以降で実行されている必要があります。外部 MySQL データベースは、データセンターでオンプレミスで実行することも、Amazon EC2 インスタンスで実行することもできます。外部 MySQL データベースは、ソース MySQL DB インスタンスと同じバージョン、またはそれ以降のバージョンを実行する必要があります。

外部 MySQL データベースへのレプリケーションは、ソース MySQL DB インスタンスからデータベースをエクスポートするのにかかる時間のみサポートされます。レプリケーションは、データがエクスポートされ、アプリケーションが外部 MySQL インスタンスへのアクセスを開始できるようになったら終了する必要があります。

このプロセスは以下のステップで構成されます。各ステップについては、後のセクションで詳しく説明します。

  1. 外部 MySQL DB インスタンスを準備します。

  2. レプリケーション用にソース MySQL DB インスタンスを準備します。

  3. mysqldump ユーティリティを使用して、ソース MySQL DB インスタンスから外部 MySQL データベースにデータベースを転送します。

  4. 外部 MySQL データベースへのレプリケーションを開始します。

  5. エクスポートが完了したら、レプリケーションを停止します。

外部の MySQL データベースの準備

次のステップを実行して、外部 MySQL データベースを準備します。

外部の MySQL データベースを準備するには

  1. 外部 MySQL データベースをインストールします。

  2. マスターユーザーとして外部 MySQL データベースに接続します。次に、データベースにアクセスする管理者、アプリケーション、およびサービスのサポートに必要なユーザーを作成します。

  3. MySQL ドキュメントの手順に従って、外部 MySQL データベースをレプリカとして準備します。詳細については、MySQL ドキュメントを参照してください。

  4. エクスポート中にリードレプリカとして動作する外部 MySQL データベースの Egress ルールを設定します。Egress ルールにより、レプリケーション中に外部 MySQL データベースがソース MySQL DB インスタンスに接続できるようになります。ソース MySQL DB インスタンスのポートおよび IP アドレスへの Transmission Control Protocol (TCP) 接続を許可する Egress ルールを指定します。

    環境に適した Egress ルールを指定します。

    • 外部 MySQL データベースが、Amazon VPC サービスに基づく Virtual Private Cloud (VPC) の Amazon EC2 インスタンスで実行されている場合は、VPC セキュリティグループで Egress ルールを指定します。詳細については、「セキュリティグループによるアクセスコントロール」を参照してください。

    • 外部 MySQL データベースが VPC 内にない Amazon EC2 インスタンスで実行されている場合は、EC2-Classic セキュリティグループに Egress ルールを指定します。

    • 外部 MySQL データベースがオンプレミスでインストールされている場合は、ファイアウォールで Egress ルールを指定します。

  5. 外部 MySQL データベースが VPC で実行されている場合は、セキュリティグループの Egress ルールに加えて、VPC アクセスコントロールリスト (ACL) のルールを設定します。

    • ACL Ingress ルールを設定し、ソース MySQL DB インスタンスの IP アドレスからポート 1024–65535 への TCP トラフィックを許可します。

    • ACL Egress ルールを設定し、ソース MySQL DB インスタンスのポートおよび IP アドレスへのアウトバウンド TCP トラフィックを許可します。

    Amazon VPC ネットワーク ACL の詳細については、Amazon VPC ユーザーガイドの「ネットワーク ACL」を参照してください。

  6. (オプション) レプリケーションエラーを回避するために、max_allowed_packet パラメータを最大サイズに設定します。この設定をお勧めします。

ソース MySQL DB インスタンスの準備

以下のステップを実行して、レプリケーションソースとしてソース MySQL DB インスタンスを準備します。

ソース MySQL DB インスタンスを準備するには

  1. レプリケーションのセットアップ中にバイナリログを保存するのに十分なディスク容量がクライアントコンピュータにあることを確認します。

  2. ソース MySQL DB インスタンスに接続し、MySQL ドキュメントの「レプリケーション用ユーザーの作成」の手順に従ってレプリケーションアカウントを作成します。

  3. レプリケーション中に外部 MySQL データベースが接続できるように、ソース MySQL DB インスタンスを実行しているシステムで Ingress ルールを設定します。外部の MySQL データベースの IP アドレスからソース MySQL DB インスタンスによって使用されるポートへの TCP 接続を許可する Ingress ルールを指定します。

  4. Egress ルールを指定します。

  5. ソース MySQL DB インスタンスが VPC で実行されている場合、セキュリティグループの Ingress ルールに加えて VPC ACL ルールを設定します。

    • ACL Ingress ルールを設定し、外部 MySQL データベースの IP アドレスから Amazon RDS インスタンスにより使用されるポートへの TCP 接続を許可します。

    • ACL Egress ルールを設定し、ポート 1024–65535 から外部 MySQL データベースの IP アドレスへの TCP 接続を許可します。

    Amazon VPC ネットワーク ACL の詳細については、Amazon VPC ユーザーガイドの「ネットワーク ACL」を参照してください。

  6. バックアップ保持期間について、エクスポート中にバイナリログが消去されない十分な長さに設定されていることを確認します。エクスポートが完了する前にいずれかのログが消去された場合、レプリケーションを最初から再開しなければなりません。バックアップ保持期間の設定の詳細については、「バックアップの使用」を参照してください。

  7. mysql.rds_set_configuration ストアドプロシージャを使用して、バイナリログの保持期間を、エクスポート中にバイナリログが消去されない十分な長さに設定します。詳細については、「MySQL バイナリログにアクセスする」を参照してください。

  8. ソース MySQL DB インスタンスのバイナリログが消去されないことをさらに確実にするため、ソース MySQL DB インスタンスから Amazon RDS リードレプリカを作成します。詳細については、「リードレプリカの作成」を参照してください。

  9. Amazon RDS リードレプリカが作成されたら、mysql.rds_stop_replication ストアドプロシージャを呼び出してレプリケーションプロセスを停止します。ソース MySQL DB インスタンスはバイナリログファイルを消去しなくなり、レプリケーションプロセスで使用できるようになります。

  10. (オプション) レプリケーションエラーを回避するために、max_allowed_packet パラメータと slave_max_allowed_packet の両方を最大サイズに設定します。両方のパラメータの最大サイズは、1 GB です。両方のパラメータに対して、この設定をお勧めします。パラメータの設定の詳細については、「DB パラメータグループのパラメータの変更」を参照してください。

データベースのコピー

データベースをコピーするには、次のステップを実行します。

データベースをコピーするには

  1. ソース MySQL DB インスタンスの RDS リードレプリカに接続し、MySQL SHOW SLAVE STATUS\G ステートメントを実行します。次の値に注意してください。

    • Master_Host

    • Master_Port

    • Master_Log_File

    • Exec_Master_Log_Pos

  2. mysqldump ユーティリティを使用してスナップショットを作成します。Amazon RDS からローカルクライアントコンピュータにデータがコピーされます。次に、別のユーティリティを実行して、データを外部 MySQL データベースにロードします。レプリケートするデータベースにある mysqldump ファイルを保存するのに十分な容量がクライアントコンピュータにあることを確認します。非常に大きなデータベースでは、このプロセスに数時間かかる可能性があります。MySQL ドキュメントの「mysqldump を使用したデータスナップショットの作成」の手順に従います。

    以下の例では、クライアントで mysqldump を実行し、外部 MySQL データベースにデータをロードする mysql ユーティリティにダンプをパイプ処理します。

    Linux、macOS、Unix の場合:

    mysqldump -h source_MySQL_DB_instance_endpoint \ -u user \ -ppassword \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 \ --compress \ --port 3306

    Windows の場合:

    mysqldump -h source_MySQL_DB_instance_endpoint ^ -u user ^ -ppassword ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 ^ --compress ^ --port 3306

    次の例では、クライアントで mysqldump を実行し、ダンプをファイルに書き込みます。

    Linux、macOS、Unix の場合:

    mysqldump -h source_MySQL_DB_instance_endpoint \ -u user \ -ppassword \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 > path/rds-dump.sql

    Windows の場合:

    mysqldump -h source_MySQL_DB_instance_endpoint ^ -u user ^ -ppassword ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 > path\rds-dump.sql

エクスポートの完了

エクスポートを完了するには、次のステップを実行します。

エクスポートを完了するには

  1. mysqldump ファイルをロードして、外部 MySQL データベースにデータベースを作成します。

  2. Amazon RDS リードレプリカで、mysql.rds_start_replication ストアドプロシージャを呼び出します。これにより、ソース MySQL DB インスタンスからレプリケーションが開始され、Amazon RDS リードレプリカからレプリケーションを停止した後に発生したすべてのソース変更がエクスポートされます。

  3. MySQL CHANGE MASTER ステートメントを使用し、外部 MySQL データベースを設定します。REPLICATION SLAVE アクセス許可を付与されたユーザーの ID とパスワードを指定します。RDS リードレプリカで実行する MySQL SHOW SLAVE STATUS\G ステートメントから取得した Master_HostMaster_PortRelay_Master_Log_FileExec_Master_Log_Pos の値を指定します。詳細については、MySQL ドキュメントを参照してください。

  4. MySQL START SLAVE コマンドを使用して、ソース MySQL DB インスタンスから外部 MySQL データベースへのレプリケーションを開始します。

  5. 外部 MySQL データベースで MySQL SHOW SLAVE STATUS\G コマンドを実行して、リードレプリカとして動作していることを確認します。結果の解釈の詳細については、MySQL ドキュメントを参照してください。

  6. 外部 MySQL データベースでのレプリケーションがソース MySQL DB インスタンスに追いついたら、MySQL STOP SLAVE コマンドを使用して、ソース MySQL DB インスタンスからのレプリケーションを停止します。

  7. Amazon RDS リードレプリカで、mysql.rds_start_replication ストアドプロシージャを呼び出します。これにより、Amazon RDS がソース MySQL DB インスタンスからのバイナリログファイルの消去を開始できるようになります。