

# レプリケーションを使用した MySQL DB インスタンスからのデータのエクスポート
<a name="MySQL.Procedural.Exporting.NonRDSRepl"></a>

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

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

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

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

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

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

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

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

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

## 外部の MySQL データベースの準備
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareRDS"></a>

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

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

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

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

1. MySQL ドキュメントの手順に従って、外部 MySQL データベースをレプリカとして準備します。詳細については、MySQL ドキュメントの「[Setting the Replica Configuration](https://dev.mysql.com/doc/refman/8.0/en/replication-howto-slavebaseconfig.html)」を参照してください。

1. エクスポート中にリードレプリカとして動作する外部 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 ルールを指定します。(詳しくは、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。)
   + 外部 MySQL データベースがオンプレミスでインストールされている場合は、ファイアウォールで Egress ルールを指定します。

1. 外部 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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)」を参照してください。*

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

## ソース MySQL DB インスタンスの準備
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareSource"></a>

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

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

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

1. ソース MySQL DB インスタンスに接続し、MySQL ドキュメントの「[Creating a User for Replication](http://dev.mysql.com/doc/refman/8.0/en/replication-howto-repuser.html)」の手順に従ってレプリケーションアカウントを作成します。

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

1. Egress ルールを指定します。
   + ソース MySQL DB インスタンスが VPC で実行されている場合、VPC セキュリティグループで Ingress ルールを指定します。(詳しくは、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。)

1. ソース 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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)」を参照してください。

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

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

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

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

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

## データベースのコピー
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CopyData"></a>

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

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

1. ソース MySQL DB インスタンスの RDS リードレプリカに接続し、MySQL `SHOW REPLICA STATUS\G` ステートメントを実行します。次の値に注意してください。
   + `Master_Host`
   + `Master_Port`
   + `Master_Log_File`
   + `Exec_Master_Log_Pos`
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

1. mysqldump ユーティリティを使用してスナップショットを作成します。Amazon RDS からローカルクライアントコンピュータにデータがコピーされます。レプリケートするデータベースにある `mysqldump` ファイルを保存するのに十分な容量がクライアントコンピュータにあることを確認します。非常に大きなデータベースでは、このプロセスに数時間かかる可能性があります。MySQL ドキュメントの「[Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)」の手順に従います。

   次の例では、クライアントで `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
   ```

   バックアップファイルを外部 MySQL データベースにロードすることができます。詳細については、MySQL ドキュメントの「[SQL 形式のバックアップの再ロード](https://dev.mysql.com/doc/refman/8.0/en/reloading-sql-format-dumps.html)」を参照してください。別のユーティリティを実行して、データを外部 MySQL データベースにロードします。

## エクスポートの完了
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CompleteExp"></a>

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

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

1. MySQL `CHANGE MASTER` ステートメントを使用し、外部 MySQL データベースを設定します。`REPLICATION SLAVE` アクセス許可を付与されたユーザーの ID とパスワードを指定します。RDS リードレプリカで実行する MySQL `Master_Host` ステートメントから取得した `Master_Port`、`Relay_Master_Log_File`、`Exec_Master_Log_Pos`、`SHOW REPLICA STATUS\G` の値を指定します。詳細については、MySQL ドキュメントの「[CHANGE MASTER TO Statement](https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html)」を参照してください。
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

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

   これにより、ソース MySQL DB インスタンスからレプリケーションが開始され、Amazon RDS リードレプリカからレプリケーションを停止した後に発生したすべてのソース変更がエクスポートされます。
**注記**  
MySQL の旧バージョンは、`START REPLICA` ではなく `START SLAVE` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`START SLAVE` を使用します。

1. 外部 MySQL データベースで MySQL `SHOW REPLICA STATUS\G` コマンドを実行して、リードレプリカとして動作していることを確認します。詳細については、MySQL ドキュメントの「[SHOW SLAVE \$1 REPLICA STATUS Statement](https://dev.mysql.com/doc/refman/8.0/en/show-slave-status.html)」を参照してください。

1. 外部 MySQL データベースでのレプリケーションがソース MySQL DB インスタンスに追いついたら、MySQL `STOP REPLICA` コマンドを使用して、ソース MySQL DB インスタンスからのレプリケーションを停止します。
**注記**  
MySQL の旧バージョンは、`STOP REPLICA` ではなく `STOP SLAVE` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`STOP SLAVE` を使用します。

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