

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

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

この手順では、データベースデータのコピーを Amazon EC2 インスタンスに送信し、そのデータを新しい Amazon RDS データベースにインポートします。次に、レプリケーションを使用して、Amazon RDS データベースをライブ外部インスタンスで最新の状態にした後、アプリケーションを Amazon RDS データベースにリダイレクトします。外部のインスタンスが MariaDB 10.0.24 以降であり、ターゲットインスタンスが RDS for MariaDB である場合は、グローバルトランザクション識別子 (GTID) に基づいて MariaDB のレプリケーションを設定します。それ以外の場合は、バイナリログの調整に基づいてレプリケーションを設定します。外部データベースがサポートしている場合は、GTID ベースのレプリケーションが推奨されます。GTID ベースのレプリケーションは信頼性の高い方法だからです。詳細については、MariaDB ドキュメントの「[グローバルトランザクション ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)」を参照してください。

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

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


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

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

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

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


SQL 形式または区切り文字付きテキスト形式でデータベースのバックアップを作成するには、`mysqldump` または `mariadb-dump` ユーティリティを使用できます。MariaDB 10.5 では、クライアントは [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/) と呼ばれます。MariaDB 11.0.1 以降では、`mariadb-dump` を `mysqldump` の代わりに使用する必要があります。非運用環境で各形式のテスト実行を行って、どちらの方法が `mysqldump` または `mariadb-dump` の実行時間が短いか確認することをお勧めします。

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

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

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

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

### レプリケーションオプションを設定するには
<a name="mariadb-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` ファイルの更新された `[mariadb]` セクションを示しています。

   ```
   [mariadb]
   log-bin
   server-id=1 
   log-basename=master1
   binlog-format=mixed
   ```

   詳細については、MariaDB ドキュメントの「[Setting the Replication Source Configuration](https://mariadb.com/docs/server/ha-and-performance/standard-replication/setting-up-replication)」を参照してください。

1. マルチ AZ DB クラスターでのレプリケーションでは、`gtid_strict_mode` を有効にします。詳細については、MariaDB のドキュメントの「[gtid\$1strict\$1mode](https://mariadb.com/docs/server/ha-and-performance/standard-replication/gtid#gtid_strict_mode)」を参照してください。

   DB インスタンスでのレプリケーションには、`gtid_strict_mode` を有効にする必要はありません。

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

   ```
   sudo service mariadb restart
   ```

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

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

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

   MySQL システムデータベースをバックアップに含めないためには、`mysqldump` または `mariadb-dump` で `--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 出力を作成するには、次のコマンドを使用します。MariaDB 10.11 以前のバージョンでは、`mariadb-dump` を `mysqldump` に置き換えます。

     Linux、macOS、Unix の場合:

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

     Windows の場合:

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

     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` または `mariadb-dump` の実行時に除外します。これを行うには、`mysqldump` または `mariadb-dump` コマンドで以下の引数を含めます。  
`--routines=0`
`--triggers=0`
`--events=0`

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

     MariaDB バージョンでは、次の出力が返されます。

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

1. 使用している外部インスタンスが MariaDB バージョン 10.0.24 以降である場合は、GTID ベースのレプリケーションを使用します。外部 MariaDB インスタンスで `SHOW MASTER STATUS` を実行してバイナリログファイル名と場所を取得し、外部 MariaDB インスタンス上で `BINLOG_GTID_POS` を実行してそれらを GTID に変換します。

   ```
   SELECT BINLOG_GTID_POS('binary_log_file_name', binary_log_file_position);
   ```

   返された GTID を書き留めます。これはレプリケーションを設定する際に必要となります。

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

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

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

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

圧縮したデータベースのバックアップファイルを Amazon EC2 インスタンスにコピーする場合、データベースインスタンス間で非圧縮データを直接コピーするよりも必要なネットワークリソースは少なくなります。データを Amazon EC2 にコピーしたら、そこから MariaDB データベースに直接コピーできます。ネットワークリソースのコストを節約するには、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/MigrateMariaDBToRDS_3.png)


### Amazon EC2 インスタンスを作成し、データをコピーするには
<a name="mariadb-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 インスタンスに接続し、次のコマンドを使用して最新のアップデートと MariaDB クライアントツールをインストールします。

   ```
   sudo yum update -y
   sudo yum install mariadb1011-client-utils -y
   ```

   詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の Linux インスタンスの「[インスタンスに接続する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)」および「MariaDB ドキュメント」の「[MariaDB Connectors](https://mariadb.com/docs/connectors)」を参照してください。

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

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

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

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

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

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

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


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

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

1. Amazon EC2 インスタンスを含む AWS リージョンに、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 形式の場合は、次のコマンドを使用します。

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

     ```
     MariaDB [(none)]> create database database_name;
     MariaDB [(none)]> use database_name;
     ```

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

     ```
     MariaDB [(none)]> source table1.sql
     MariaDB [(none)]> source table2.sql
     etc...
     ```

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

     ```
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     パフォーマンスを向上させるために、複数の接続からこれらのオペレーションをパラレル実行して、すべてのテーブルを同時に作成およびロードすることができます。
**注記**  
最初にテーブルをダンプした際、`mysqldump` または `mariadb-dump` でデータをフォーマットするオプションを使用した場合は、データファイルのコンテンツが適切に解釈できるように、`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="mariadb-importing-data-reduced-downtime-replicate-data"></a>

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

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


Amazon RDS データベースでレプリケーションを開始するために必要なアクセス許可は限定されており、Amazon RDS マスターユーザーは利用できません。このため、適切な Amazon RDS ストアドプロシージャを使用します。
+ [mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ レプリケーションを設定するには [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="mariadb-importing-data-reduced-downtime-start-replication"></a>

タスク 1 の[レプリケーションオプションの設定時](#mariadb-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. SQL 形式を使用してバックアップファイルを作成しており、外部インスタンスが MariaDB 10.0.24 以降でない場合は、次のコマンドを実行してファイルのコンテンツを表示します。

   ```
   cat backup.sql
   ```

   このファイルに、マスターログファイルの名前と場所を示す `CHANGE MASTER TO` コメントが含まれています。`--master-data` で `mysqldump` オプションを使用した場合に、バックアップファイルにこのコメントが含まれます。`MASTER_LOG_FILE` と `MASTER_LOG_POS` の値に注意してください。

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

   バックアップファイルの作成に区切りテキスト形式を使用しており、外部のインスタンスが MariaDB 10.0.24 以降でない場合は、[既存のデータベースのバックアップコピーの作成時に](#mariadb-importing-data-reduced-downtime-create-backup)、タスク 1 のステップ 1 でバイナリログ座標を既に取得しているはずです。

   外部のインスタンスが MariaDB 10.0.24 以降の場合は、[既存のデータベースのバックアップコピーの作成時](#mariadb-importing-data-reduced-downtime-create-backup)に、タスク 1 のステップ 2 でレプリケーションを開始するための GTID を既に取得しているはずです。

1. Amazon RDS データベースをレプリカにします。外部のインスタンスが MariaDB 10.0.24 以降でない場合、マスターユーザーとして Amazon RDS データベースに接続し、[mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) ストアドプロシージャを使用して、ソースのレプリケーションインスタンスとしてソースデータベースを特定します。

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

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

   外部のインスタンスが MariaDB 10.0.24 以降の場合、マスターユーザーとして Amazon RDS データベースに接続し、[mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) ストアドプロシージャを使用して、ソースのレプリケーションインスタンスとしてソースデータベースを特定します。[既存のデータベースのバックアップコピーの作成時](#mariadb-importing-data-reduced-downtime-create-backup)に、タスク 1 のステップ 2 で確認した GTID を使用します。コマンドの例を次に示します。

   ```
   CALL mysql.rds_set_external_master_gtid ('source_server_ip_address', 3306, 'ReplicationUser', 'password', 'GTID', 1); 
   ```

   `source_server_ip_address` は、ソースレプリケーションインスタンスの IP アドレスです。EC2 プライベート DNS アドレスは現在サポートされていません。
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

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 を返す場合、レプリカはソースレプリケーションインスタンスで最新の状態になります。

   MariaDB 10.5、10.6、10.11、11.4 または 11.8 DB インスタンスの場合は、MySQL コマンドを実行する代わりに [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) ストアドプロシージャを使用します。

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

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

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

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


### ライブアプリケーションを MariaDB データベースにリダイレクトしてレプリケーションを停止するには
<a name="mariadb-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;
   ```

   MariaDB 10.5、10.6、10.11、11.4 または 11.8 DB インスタンスの場合は、MySQL コマンドを実行する代わりに [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) プロシージャを使用します。

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

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

1. 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 データベースで [mysql.rds\$1reset\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) ストアドプロシージャを使用する次のコマンドを実行して、レプリケーション設定をリセットします。これにより、このインスタンスはレプリカとして識別されなくなります。

   ```
   CALL mysql.rds_reset_external_master;
   ```

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