

# ダウンタイムを短縮して Amazon RDS for MySQL データベースにデータをインポートする
<a name="mysql-importing-data-reduced-downtime"></a>

場合によっては、ライブアプリケーションをサポートする外部の MySQL データベースから RDS for MySQL DB インスタンス、または RDS for MySQL マルチ AZ DB クラスターにデータをインポートする必要があります。次の手順を使用して、アプリケーションの可用性への影響を最小限に抑えることができます。この手順は、巨大なデータベースを使用する場合にも役立ちます。この手順を使用すると、ネットワーク経由で AWS に渡されるデータ量を削減することで、インポートのコストを削減できます。

この手順では、データベースデータのコピーを Amazon EC2 インスタンスに送信し、そのデータを新しい Amazon RDS データベースにインポートします。次に、レプリケーションを使用して、Amazon RDS データベースをライブ外部インスタンスで最新の状態にした後、アプリケーションを Amazon RDS データベースにリダイレクトします。バイナリログの調整に基づいてレプリケーションを設定します。

**注記**  
RDS for MySQL DB インスタンスにデータをインポートする際、シナリオでサポートされている場合は、バックアップファイルと Amazon S3 を使用して、Amazon RDS との間でデータを移動することをお勧めします。詳細については、「[Amazon RDS for MySQL DB インスタンスへのバックアップの復元](MySQL.Procedural.Importing.md)」を参照してください。

次の図は、外部 MySQL データベースを Amazon RDS 上の MySQL データベースにインポートする様子を示しています。

![\[外部 MySQL データベースを Amazon RDS 上の MySQL データベースにインポートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_1.png)


## タスク 1: 既存のデータベースのコピーを作成する
<a name="mysql-importing-data-reduced-downtime-copy-database"></a>

最小限のダウンタイムで RDS for MySQL データベースに大量のデータを移行するプロセスでは、最初のステップとしてソースデータのコピーを作成します。

次の図は、MySQL データベースのバックアップの作成を示しています。

![\[MySQL データベースのバックアップを作成するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_2.png)


SQL 形式または区切り文字付きテキスト形式でデータベースのバックアップを作成するには、`mysqldump` ユーティリティを使用できます。非運用環境で各形式のテスト実行を行って、どちらの方法が `mysqldump` の実行時間が短いか確認することをお勧めします。

また、ロードに区切り文字付きテキスト形式を使用することでもたらされるメリットに対して、`mysqldump` のパフォーマンスの重み付けをすることをお勧めします。区切り文字付きテキスト形式を使用したバックアップでは、ダンプされる各テーブルについてタブ区切りテキストファイルを作成されます。データベースのインポートに必要な時間を短縮するため、`LOAD DATA LOCAL INFILE` コマンドを使用してこれらのファイルを同時にロードできます。詳細については、任意のソースからデータをインポートする手順の「[ステップ 5: データをロードする](mysql-importing-data-any-source.md#mysql-importing-data-any-source-load-data)」を参照してください。

バックアップ操作をスタートする前に、Amazon RDS にコピーする MySQL データベースでレプリケーションのオプションを設定してください。レプリケーションのオプションには、バイナリログ記録の有効化や一意のサーバー ID の設定が含まれます。これらのオプションを設定すると、サーバーはデータベーストランザクションのログ作成をスタートし、このプロセスの後でこのサーバーをソースレプリケーションインスタンスにするために準備します。

次の推奨事項と考慮事項に注意してください。
+ `--single-transaction` オプションは、データベースの一貫した状態をダンプするため、`mysqldump` と共に使用します。有効なダンプファイルを確保するために、`mysqldump` の実行中はデータ定義言語 (DDL) ステートメントを実行しないでください。これらのオペレーションに対してメンテナンスウィンドウをスケジュールできます。
+ ダンプファイルから次のスキーマを除外します。
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` ユーティリティを使用すると、これらのスキーマをデフォルトで除外できます。
+ ユーザーや権限を移行する必要がある場合は、再作成するデータ制御言語 (DCL) を生成するツールの使用を検討します。例えば、[pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) ユーティリティがあります。

### レプリケーションオプションを設定するには
<a name="mysql-importing-data-reduced-downtime-set-replication-options"></a>

1. `my.cnf` ファイルを編集します。​このファイルは `/etc` にあります。

   ```
   sudo vi /etc/my.cnf
   ```

   `log_bin` オプションと `server_id` オプションを `[mysqld]` に追加します。`log_bin` オプションは、バイナリログファイルのファイル名識別子を提供します。`server_id` オプションは、ソースとレプリカの関係のサーバーに一意の識別子を提供します。

   次の例は、`my.cnf` ファイルの更新された `[mysqld]` セクションを示しています。

   ```
   [mysqld]
   log-bin=mysql-bin
   server-id=1
   ```

   詳細については、MySQL ドキュメントの「[Setting the Replication Source Configuration](https://dev.mysql.com/doc/refman/8.4/en/replication-howto-masterbaseconfig.html)」を参照してください。

1. マルチ AZ DB クラスターでのレプリケーションでは、`ENFORCE_GTID_CONSISTENCY` および `GTID_MODE` パラメータを `ON` に設定します。

   ```
   mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
   ```

   ```
   mysql> SET @@GLOBAL.GTID_MODE = ON;
   ```

   これらの設定は、DB インスタンスでのレプリケーションには必要ありません。

1. `mysql` サービスを再起動します。

   ```
   sudo service mysqld restart
   ```

### 既存のデータベースのバックアップコピーを作成するには
<a name="mysql-importing-data-reduced-downtime-create-backup"></a>

1. `mysqldump` ユーティリティを使用し、SQL 形式または区切り文字付きテキスト形式を指定して、データのバックアップを作成します。

   MySQL 8.0.25 以前のバージョンでは、サーバー間のレプリケーションを開始するために使用できるバックアップファイルを作成するには、`--master-data=2` を指定します。MySQL 8.0.26 以降のバージョンでは、サーバー間のレプリケーションを開始するために使用できるバックアップファイルを作成するには、`--source-data=2` を指定します。詳細については、MySQL ドキュメントの「[mysqldump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)」を参照してください。

   パフォーマンスを向上させ、データ整合性を確保するために、`mysqldump` で `--order-by-primary` オプションと `--single-transaction` オプションを使用します。

   MySQL システムデータベースをバックアップに含めないためには、`mysqldump` で `--all-databases` オプションを使用しないでください。詳細については、MySQL ドキュメントの「[Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)」を参照してください。

   バックアップファイルが作成されるディレクトリを書き込み可能にするために、必要に応じて `chmod` を使用します。
**重要**  
Windows で、管理者としてコマンドウィンドウを実行します。
   + SQL 出力を作成するには、次のコマンドを使用します。

     Linux、macOS、Unix の場合:

     ```
     sudo mysqldump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。

     Windows の場合:

     ```
     mysqldump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。
   + 区切り文字付きテキスト出力を作成するには、次のコマンドを使用します。

     Linux、macOS、Unix の場合:

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     Windows の場合:

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。  
Amazon RDS データベースで、ストアドプロシージャ、トリガー、関数、イベントを必ず手動で作成してください。コピーするデータベースにこれらのオブジェクトのいずれかが含まれる場合は、`mysqldump` の実行時に除外します。これを行うには、`mysqldump` コマンドで以下の引数を含めます。  
`--routines=0`
`--triggers=0`
`--events=0`

     MySQL 8.0.22 以前のバージョンでは、`mysqldump` を実行して区切りテキスト形式を指定すると、`CHANGE MASTER TO` コメントが返されます。このコメントには、マスターログのファイル名と場所が含まれます。MySQL 8.0.23 以降のバージョンでは、区切りテキスト形式を使用して `mysqldump` を実行すると、`CHANGE REPLICATION SOURCE TO` コメントが返されます。このコメントには、ソースログファイルの名前と位置が含まれます。外部インスタンスが MySQL 8.0.23 以降の場合は、`MASTER_LOG_FILE` および `MASTER_LOG_POS` の値を書き留めてください。これらの値は、レプリケーションを設定するときに必要です。

     MySQL 8.0.22 以前のバージョンでは、次の出力が返されます。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

     MySQL 8.0.23 以降のバージョンでは、次の出力が返されます。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;
     ```

     MySQL 8.0.22 以前のバージョンで SQL 形式を使用している場合は、バックアップファイル内の `CHANGE MASTER TO` コメントでマスターログファイル名と位置を取得できます。MySQL 8.0.23 以降のバージョンで SQL 形式を使用している場合は、バックアップファイル内の `CHANGE REPLICATION SOURCE TO` コメントでソースログファイル名と位置を取得できます。

1. Amazon RDS データベースにデータをコピーするために必要なネットワークリソースの量を減らすために、コピーされたデータを圧縮します。バックアップファイルのサイズをメモします。この情報は、作成する Amazon EC2 インスタンスの大きさを決定するときに必要です。作業が終了したら、GZIP または任意の圧縮ユーティリティを使用してバックアップファイルを圧縮します。
   + SQL 出力を圧縮するには、次のコマンドを使用します。

     ```
     gzip backup.sql
     ```
   + 区切り文字付きテキスト出力を圧縮するには、次のコマンドを使用します。

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## タスク 2: Amazon EC2 インスタンスを作成し、圧縮したデータベースをコピーする
<a name="mysql-importing-data-reduced-downtime-create-ec2-copy-database"></a>

圧縮したデータベースのバックアップファイルを Amazon EC2 インスタンスにコピーする場合、データベースインスタンス間で非圧縮データを直接コピーするよりも必要なネットワークリソースは少なくなります。データを Amazon EC2 にコピーしたら、そこから MySQL データベースに直接コピーできます。ネットワークリソースのコストを節約するには、Amazon EC2 インスタンスが Amazon RDS DB インスタンスと同じ AWS リージョンに存在している必要があります。Amazon EC2 インスタンスを Amazon RDS データベースと同じ AWS リージョンに配置することで、インポート時のネットワークレイテンシーも低減されます。

次の図は、Amazon EC2 インスタンスへのデータベースバックアップのコピーを示しています。

![\[データベースのバックアップを Amazon EC2 インスタンスにコピーするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_3.png)


### Amazon EC2 インスタンスを作成し、データをコピーするには
<a name="mysql-importing-data-reduced-downtime-create-ec2"></a>

1. Amazon RDS データベースを作成する予定の AWS リージョンに、仮想プライベートクラウド (VPC)、VPC セキュリティグループ、および VPC サブネットを作成します。VPC セキュリティグループのインバウンドルールで、アプリケーションが AWS に接続するために必要な IP アドレスを許可していることを確認します。IP アドレスの範囲 (`203.0.113.0/24` など) や別の VPC セキュリティグループを指定できます。[Amazon VPC コンソール](https://console.aws.amazon.com/vpc)を使用して、VPC、サブネット、セキュリティグループを作成および管理できます。詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[Amazon VPC の開始方法](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)」を参照してください。

1. [Amazon EC2 管理コンソール](https://console.aws.amazon.com/ec2)を開き、Amazon EC2 インスタンスと Amazon RDS データベースの両方が含まれる AWS リージョンを選択します。ステップ 1 で作成した VPC、サブネット、セキュリティグループを使用して Amazon EC2 インスタンスを起動します。非圧縮の場合のデータベースバックアップファイルに十分なストレージを備えたインスタンスタイプを選択していることを確認します。Amazon EC2 インスタンスの詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[Amazon EC2 の使用を開始する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)」を参照してください。

1. Amazon EC2 インスタンスから Amazon RDS データベースに接続するには、VPC セキュリティグループを編集します。EC2 インスタンスのプライベート IP アドレスを指定するインバウンドルールを追加します。このプライベート IP アドレスは、EC2 コンソールウィンドウの [**Instance**] ペインの [**Details**] タブで確認できます。VPC セキュリティグループを編集してインバウンドルールを追加するには、EC2 コンソールのナビゲーションペインの **[Security Groups]** (セキュリティグループ) でセキュリティグループを選択してから、EC2 インスタンスのプライベート IP アドレスを指定して MySQL または Aurora のインバウンドルールを追加します。VPC セキュリティグループにインバウンドルールを追加する方法については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルール](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)」を参照してください。

1. ローカルシステムから Amazon EC2 インスタンスに、圧縮されたデータベースバックアップファイルをコピーします。必要に応じて `chmod` を使用して、Amazon EC2 インスタンスのターゲットディレクトリに対する書き込みアクセス許可があることを確認します。`scp` または Secure Shell (SSH) クライアントを使用してファイルをコピーできます。以下は `scp` コマンドの例です。

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
機密データをコピーするときは、必ず安全なネットワーク転送プロトコルを使用してください。

1. Amazon EC2 インスタンスに接続し、次のコマンドを使用して最新のアップデートと MySQL クライアントツールをインストールします。

   ```
   sudo yum update -y
   sudo yum install mysql -y
   ```

   詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の Linux インスタンスの「[インスタンスをクリーンアップする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)」を参照してください。
**重要**  
この例では、MySQL クライアントを Amazon Linux ディストリビューションの Amazon マシンイメージ (AMI) にインストールします。この例では、Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションには MySQL クライアントをインストールできません。MySQL のインストールの詳細については、MySQL ドキュメントの「[Installing MySQL](https://dev.mysql.com/doc/refman/8.4/en/installing.html)」を参照してください。

1. Amazon EC2 インスタンスに接続されている間に、データベースバックアップファイルを解凍します。次のコマンドはその例です。
   + SQL 出力を解凍するには、次のコマンドを使用します。

     ```
     gzip backup.sql.gz -d
     ```
   + 区切り文字付きテキスト出力を解凍するには、次のコマンドを使用します。

     ```
     tar xzvf backup.tar.gz
     ```

## タスク 3: MySQL データベースを作成し、Amazon EC2 インスタンスからデータをインポートする
<a name="mysql-importing-data-reduced-downtime-create-database-import-data"></a>

Amazon EC2 インスタンスと同じ AWS リージョンに RDS for MySQL DB インスタンス、または RDS for MySQL マルチ AZ DB クラスターを作成することにより、Amazon EC2 からのデータベースのバックアップファイルをインターネット経由よりも速くインポートできます。

次の図は、Amazon EC2 インスタンスから MySQL データベースにバックアップをインポートする様子を示しています。

![\[EC2 インスタンスから MySQL データベースにバックアップをインポートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_4.png)


### MySQL データベースを作成し、データをインポートするには
<a name="mysql-importing-data-reduced-downtime-create-database"></a>

1. この Amazon RDS データベースについて予想されるワークロードをサポートするのに必要な DB インスタンスクラスとストレージ領域の容量を決定します。このプロセスの一環として、データロードの手順に十分な領域と処理能力を決定します。また、本番稼働ワークロードの処理に必要なものも決定します。これは、ソースの MySQL データベースのサイズおよびリソースに基づいて見積もることができます。詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。

1. Amazon EC2 インスタンスを含む AWS リージョンに、DB インスタンスまたはマルチ AZ DB クラスターを作成します。

   RDS for MySQL マルチ AZ DB クラスターを作成するには、「[Amazon RDS 用のマルチ AZ DB クラスターの作成](create-multi-az-db-cluster.md)」の手順に従います。

   RDS for MySQL DB インスタンスを作成するには、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」の手順に従い、以下のガイドラインに従ってください。
   + ソース DB インスタンスと互換性のある DB エンジンのバージョンを指定します。
   + Amazon EC2 インスタンスと同じ仮想プライベートクラウド (VPC) と VPC セキュリティグループを指定します。これにより、Amazon EC2 インスタンスと Amazon RDS インスタンスはネットワーク上で相互に表示されることが確認できます。DB インスタンスがパブリックにアクセスできることを確認してください。以下のセクションで説明するように、ソースデータベースでレプリケーションをセットアップするには、DB インスタンスにパブリックアクセス可能である必要があります。
   + データベースのバックアップのインポートが完了するまで、複数のアベイラビリティーゾーン、バックアップ保持、リードレプリカを設定しないでください。インポートが完了したら、本稼働インスタンスについて、マルチ AZ とバックアップ保持を設定できます。

1. Amazon RDS データベースのデフォルトの設定オプションを確認します。データベースのデフォルトパラメータグループに必要な設定オプションがない場合は、別のパラメータグループを検索するか、新しいパラメータグループを作成します。パラメータグループの作成の詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

1. マスターユーザーとして、新しい Amazon RDS データベースに接続します。DB インスタンスにアクセスする必要がある管理者、アプリケーション、およびサービスのサポートに必要なユーザーを作成します。Amazon RDS データベースのホスト名は、この DB インスタンスの **[エンドポイント]** の値からポート番号を除いた値 (例: `mysampledb.123456789012.us-west-2.rds.amazonaws.com`) です。エンドポイントの値は、Amazon RDS コンソールのデータベースの詳細で確認できます。

1. Amazon EC2 インスタンスに接続します。詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の Linux インスタンスの「[インスタンスをクリーンアップする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)」を参照してください。

1. `mysql` コマンドを使用して、Amazon EC2 インスタンスからリモートホストとして Amazon RDS データベースに接続します。コマンドの例を次に示します。

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* は、Amazon RDS データベースのエンドポイントです。

1. `mysql` プロンプトで、データベースダンプファイルの名前を渡して `source` コマンドを実行します。このコマンドは、Amazon RDS DB インスタンスにデータをロードします。
   + SQL 形式の場合は、次のコマンドを使用します。

     ```
     mysql> source backup.sql;
     ```
   + 区切り文字付きテキスト形式の場合は、Amazon RDS データベースをセットアップしたときに作成したデフォルトのデータベースではない場合、まず、データベースを作成します。

     ```
     mysql> create database database_name;
     mysql> use database_name;
     ```

     次にテーブルを作成します。

     ```
     mysql> source table1.sql
     mysql> source table2.sql
     etc...
     ```

     次にデータをインポートします。

     ```
     mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     パフォーマンスを向上させるために、複数の接続からこれらのオペレーションをパラレル実行して、すべてのテーブルを同時に作成およびロードすることができます。
**注記**  
最初にテーブルをダンプした際、`mysqldump` でデータをフォーマットするオプションを使用した場合は、データファイルのコンテンツが適切に解釈できるように、`LOAD DATA LOCAL INFILE` でも必ず同じオプションを使用する必要があります。

1. インポートしたデータベースの単一のテーブルまたは 2 つのテーブルに対してシンプルな `SELECT` クエリを実行して、インポートが正常に完了したかを検証します。

この手順で使用された Amazon EC2 インスタンスが今後不要な場合は、EC2 インスタンスを終了して、AWS リソース使用率を減らします。EC2 インスタンスを終了するには、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[インスタンスの終了](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)」を参照してください。

## タスク 4: 外部データベースから新しい Amazon RDS データベースにデータをレプリケートする
<a name="mysql-importing-data-reduced-downtime-replicate-data"></a>

ソースデータベースは、データをコピーして MySQL データベースに転送するまでに更新された可能性があります。その場合は、レプリケーションを使用して、コピーしたデータベースをソースデータベースで最新のものにすることができます。

![\[外部 MySQL データベースから Amazon RDS 上のデータベースにデータをレプリケートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_5.png)


Amazon RDS データベースでレプリケーションを開始するために必要なアクセス許可は限定されており、Amazon RDS マスターユーザーは利用できません。このため、メジャーエンジンバージョンに適した Amazon RDS ストアドプロシージャを使用します。
+ [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [mysql.rds\$1set\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)
+ レプリケーションを設定するには [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md)、レプリケーションを開始するには [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)

### レプリケーションをスタートするには
<a name="mysql-importing-data-reduced-downtime-start-replication"></a>

タスク 1 の[レプリケーションオプションの設定時に](#mysql-importing-data-reduced-downtime-set-replication-options)、バイナリログ記録を有効にし、ソースデータベースに一意のサーバー ID を設定しました。これで、ライブデータベースをソースレプリケーションインスタンスとして、Amazon RDS データベースをレプリカとしてセットアップできます。

1. Amazon RDS コンソールで、ソースデータベースをホストするサーバーの IP アドレスを Amazon RDS データベースの VPC セキュリティグループに追加します。VPC セキュリティグループの詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルールを設定する](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)」を参照してください。

   ソースインスタンスと通信できるためには、Amazon RDS データベースの IP アドレスからの接続を許可するようにローカルネットワークを設定することも必要になる場合があります。Amazon RDS データベースの IP アドレスを確認するには、`host` コマンドを使用します。

   ```
   host host_name
   ```

   *host\$1name* は、Amazon RDS データベースのエンドポイントの DNS 名 (例: `myinstance.123456789012.us-east-1.rds.amazonaws.com`) です。エンドポイントの値は、Amazon RDS コンソールの DB インスタンスの詳細で確認できます。

1. 選択したクライアントを使用して、ソースインスタンスに接続し、レプリケーションに使用するユーザーを作成します。このアカウントはレプリケーション専用に使用され、セキュリティを強化するためにドメインに制限する必要があります。コマンドの例を次に示します。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

1. ソースインスタンスについて、`REPLICATION CLIENT` と `REPLICATION SLAVE` の特権をレプリケーションユーザーに付与します。たとえば、すべてのデータベースに対する `REPLICATION CLIENT` と `REPLICATION SLAVE` の特権を、「`repl_user`」ユーザーに付与するには、次のコマンドを実行します。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. Amazon RDS データベースをレプリカにします。マスターユーザーとして Amazon RDS データベースに接続し、適切な Amazon RDS ストアドプロシージャを使用して、ソースデータベースをソースレプリケーションインスタンスとして指定します。
   + [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master)
   + [mysql.rds\$1set\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)

   SQL 形式のバックアップファイルがある場合は、ステップ 4 で確認したマスターログのファイル名とマスターログの位置を使用します。区切り文字テキスト形式を使用した場合は、バックアップファイルの作成時に決定した名前と場所を使用します。次のコマンドはその例です。

   **MySQL バージョン 8.4 以降**

   ```
   CALL mysql.rds_set_external_source ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MySQL 8.0 以前のバージョン**

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

1. Amazon RDS データベースでレプリケーションを開始するには、[mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) ストアドプロシージャを使用する次のコマンドを実行します。

   ```
   CALL mysql.rds_start_replication;
   ```

1. Amazon RDS データベースで、レプリカがいつソースレプリケーションインスタンスの最新の状態に更新されるかを特定するには、[SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) コマンドを実行します。`SHOW REPLICA STATUS` コマンドの結果には、`Seconds_Behind_Master` フィールドが含まれます。`Seconds_Behind_Master` フィールドが 0 を返す場合、レプリカはソースレプリケーションインスタンスで最新の状態になります。
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

1. Amazon RDS データベースが最新の状態になったら、必要に応じてデータベースを復元できるように、自動バックアップを有効にします。[Amazon RDS コンソール](https://console.aws.amazon.com/rds/)を使用して、Amazon RDS データベースの自動バックアップを有効化または変更できます。詳細については、「[バックアップの概要](USER_WorkingWithAutomatedBackups.md)」を参照してください。

## タスク 5: ライブアプリケーションを Amazon RDS インスタンスにリダイレクトする
<a name="mysql-importing-data-reduced-downtime-redirect-app"></a>

MySQL データベースがソースレプリケーションインスタンスで最新の状態になったら、ライブアプリケーションを更新して、Amazon RDS インスタンスを使用できます。

![\[レプリケーションを停止し、ライブアプリケーションを Amazon RDS 上のデータベースにリダイレクトするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_6.png)


### ライブアプリケーションを MySQL データベースにリダイレクトしてレプリケーションを停止するには
<a name="mysql-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. Amazon RDS データベースの VPC セキュリティグループを追加するには、アプリケーションをホストするサーバーの IP アドレスを追加します。VPC セキュリティグループの変更の詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルールを設定する](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)」を参照してください。

1. [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) コマンドの結果の `Seconds_Behind_Master` フィールドが 0 であることを確認します。この値は、レプリカがソースレプリケーションインスタンスの最新の状態であることを示します。

   ```
   SHOW REPLICA STATUS;
   ```
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

1. トランザクションが終了したら、ソースへのすべての接続を閉じます。

1. Amazon RDS データベースを使用するようにアプリケーションを更新します。この更新には、一般に、Amazon RDS データベースのホスト名とポート、接続に使用するユーザーアカウントとパスワード、および使用するデータベースを識別する接続設定の変更が含まれます。

1. DB インスタンスに接続します。

   マルチ AZ DB クラスターの場合は、ライター DB インスタンスに接続します。

1. [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) ストアドプロシージャを使用する次のコマンドを実行して、Amazon RDS インスタンスのレプリケーションを停止します。

   ```
   CALL mysql.rds_stop_replication;
   ```

1. Amazon RDS データベースで適切な Amazon RDS ストアドプロシージャを使用して、このインスタンスがレプリカとして識別されないようにレプリケーション設定をリセットします。
   +  [mysql\$1rds\$1reset\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 
   + [mysql.rds\$1reset\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)

   **MySQL バージョン 8.4 以降**

   ```
   CALL mysql.rds_reset_external_source;
   ```

   **MySQL 8.0 以前のバージョン**

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. マルチ AZ のサポートやリードレプリカなど、Amazon RDS のその他の機能を有効にします。詳細については、「[Amazon RDS でのマルチ AZ 配置の設定と管理](Concepts.MultiAZ.md)」および「[DB インスタンスのリードレプリカの操作](USER_ReadRepl.md)」を参照してください。