

# マルチソースレプリケーションの管理
<a name="mysql-stored-proc-multi-source-replication"></a>

以下のストアドプロシージャは、RDS for MySQL マルチソースレプリカでレプリケーションチャネルを設定および管理します。詳細については、「[Amazon RDS for MySQL のマルチソースレプリケーションの設定](mysql-multi-source-replication.md)」を参照してください。

これらのストアドプロシージャは、次のエンジンバージョンを実行している RDS for MySQL DB インスタンスでのみ使用できます。
+ すべての 8.4 バージョン
+ 8.0.35 以降のマイナーバージョン
+ 5.7.44 以降のマイナーバージョン

`caching_sha2_passwword` で設定されたレプリケーションユーザーによるレプリケーションを、ストアドプロシージャを使用して管理する場合は、`SOURCE_SSL=1` を指定して TLS を設定する必要があります。`caching_sha2_password` は RDS for MySQL 8.4 のデフォルトの認証プラグインです。

**注記**  
このドキュメントではソース DB インスタンスを RDS for MySQL DB インスタンスと呼びますが、これらの手順は Amazon RDS の外部で実行されている MySQL インスタンスでも機能します。

**Topics**
+ [mysql.rds\$1next\$1source\$1log\$1for\$1channel](#mysql_rds_next_source_log_for_channel)
+ [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1for\$1channel](#mysql_rds_set_external_source_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel](#mysql_rds_set_external_source_with_auto_position_for_channel)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel)
+ [mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel](#mysql_rds_set_source_auto_position_for_channel)
+ [mysql.rds\$1set\$1source\$1delay\$1for\$1channel](#mysql_rds_set_source_delay_for_channel)
+ [mysql.rds\$1skip\$1repl\$1error\$1for\$1channel](#mysql_rds_skip_repl_error_for_channel)
+ [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)
+ [mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel)
+ [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel)
+ [mysql.rds\$1stop\$1replication\$1for\$1channel](#mysql_rds_stop_replication_for_channel)

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
<a name="mysql_rds_next_source_log_for_channel"></a>

ソース DB インスタンスログの位置を、チャネルのソース DB インスタンスの次のバイナリログの先頭に変更します。このプロシージャは、マルチソースレプリカでレプリケーション I/O エラー 1236 が発生した場合にのみ使用してください。

### 構文
<a name="mysql_rds_next_source_log_for_channel-syntax"></a>

 

```
CALL mysql.rds_next_source_log_for_channel(
curr_master_log,
channel_name           
);
```

### パラメータ
<a name="mysql_rds_next_source_log_for_channel-parameters"></a>

 *curr\$1master\$1log*  
現在のソースログファイルのインデックス。例えば、現在のファイルが `mysql-bin-changelog.012345` という名前の場合は、インデックスは 12345 になります。現在のソースログファイルの名前を調べるには、`SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` コマンドを実行し、`Source_Log_File` フィールドを確認します。

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_next_source_log_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_next_source_log_for_channel` を実行する必要があります。例えば、IO\$1Thread エラーが発生した場合、このプロシージャを使用して現在のバイナリログファイルのすべてのイベントをスキップし、`channel_name` で指定されたチャネルの次のバイナリログファイルからレプリケーションを再開できます。

### 例
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

マルチソースレプリカのチャネルでレプリケーションが失敗するとします。マルチソースレプリカで `SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G` を実行すると、次の結果が返されます。

```
mysql> SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: ReplicationUser
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:.
              .
              .
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
               .
               .
                 Channel_name: channel_1
              .
              .
 -- Some fields are omitted in this example output
```

`Last_IO_Errno` フィールドはインスタンスが I/O エラー 1236 を受け取ったことを示します。`Source_Log_File` フィールドは、ファイル名が `mysql-bin-changelog.012345` であることを示しています。これは、ログファイルのインデックスが `12345` であることを表しています。エラーを解決するには、以下のパラメータを使用して `mysql.rds_next_source_log_for_channel` を呼び出すことができます。

```
CALL mysql.rds_next_source_log_for_channel(12345,'channel_1');
```

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
<a name="mysql_rds_reset_external_source_for_channel"></a>

指定されたチャネルでのレプリケーションプロセスを停止し、マルチソースレプリカからチャネルおよび関連する設定を削除します。

**重要**  
この手順を実行するには、`autocommit` を有効にする必要があります。これを有効にするには、`autocommit` パラメータを `1` に設定します。パラメータの変更については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

### 構文
<a name="mysql_rds_reset_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_reset_external_source_for_channel (channel_name);
```

### パラメータ
<a name="mysql_rds_reset_external_source_for_channel-parameters"></a>

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_reset_external_source_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_reset_external_source_for_channel` を実行する必要があります。このプロシージャは、削除されるチャネルに属するすべてのリレーログを削除します。

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
<a name="mysql_rds_set_external_source_for_channel"></a>

RDS for MySQL DB インスタンスのレプリケーションチャネルを設定して、別の RDS for MySQL DB インスタンスからデータをレプリケートします。

**重要**  
この手順を実行するには、`autocommit` を有効にする必要があります。これを有効にするには、`autocommit` パラメータを `1` に設定します。パラメータの変更については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

**注記**  
代わりに [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel) ストアドプロシージャを使用して、このチャネルを遅延レプリケーションで設定できます。

### 構文
<a name="mysql_rds_set_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_set_external_source_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , channel_name
);
```

### パラメータ
<a name="mysql_rds_set_external_source_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL ソース DB インスタンスのホスト名または IP アドレス。

 *host\$1port*   
RDS for MySQL ソース DB インスタンスで使用されるポート。ポート番号を変換する Secure Shell (SSH) ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって発行されるポート番号を指定します。

 *replication\$1user\$1name*   
RDS for MySQL ソース DB インスタンスの `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つユーザーの ID。ソース DB インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

 *replication\$1user\$1password*   
`replication_user_name` で指定されたユーザー ID のパスワード。

 *mysql\$1binary\$1log\$1file\$1name*   
レプリケーション情報を含むソース DB インスタンスのバイナリログの名前。

 *mysql\$1binary\$1log\$1file\$1location*   
`mysql_binary_log_file_name` バイナリログ内の場所。レプリケーションでは、この場所からレプリケーション情報の読み取りをスタートします。  
binlog ファイルの名前と場所は、ソース DB インスタンスで `SHOW BINARY LOG STATUS` を実行することによって決定できます。  
MySQL の旧バージョンは、`SHOW BINARY LOG STATUS` ではなく `SHOW MASTER STATUS` を使用していました。8.4 より前の MySQL バージョンを使用している場合は、`SHOW MASTER STATUS` を使用します。

 *ssl\$1encryption*   
レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。  
`SOURCE_SSL_VERIFY_SERVER_CERT` オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

 *channel\$1name*   
レプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_set_external_source_for_channel-usage-notes"></a>

 マスターユーザーが `mysql.rds_set_external_source_for_channel` を実行する必要があります。このプロシージャは、レプリケーションチャネルを作成するターゲット RDS for MySQL DB インスタンスで実行する必要があります。

 `mysql.rds_set_external_source_for_channel` を実行する前に、マルチソースレプリカに必要な権限を持つレプリケーションユーザーをソース DB インスタンスに設定します。マルチソースレプリカをソース DB インスタンスに接続するには、ソース DB インスタンスに対する `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つレプリケーションユーザーの `replication_user_name` および `replication_user_password` の値を指定する必要があります。

**ソース DB インスタンスでレプリケーションユーザーを設定するには**

1. 選択した MySQL クライアントを使用して、ソース DB インスタンスに接続し、レプリケーションに使用するユーザーアカウントを作成します。以下に例を示します。
**重要**  
セキュリティのベストプラクティスとして、次の例に示すプレースホルダー値以外のパスワードを指定します。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. ソース DB インスタンスで、`REPLICATION CLIENT` および `REPLICATION SLAVE` 権限をレプリケーションユーザーに付与します。次の例では、ドメインの 「repl\$1user」ユーザーに、すべてのデータベースの `REPLICATION CLIENT` および `REPLICATION SLAVE` 権限を付与します。

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

暗号化されたレプリケーションを使用するには、SSL 接続を使用するようにソース DB インスタンスを設定します。

`mysql.rds_set_external_source_for_channel` を呼び出し、このレプリケーションチャネルを設定した後、レプリカに対して [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) を呼び出してチャネルでレプリケーションプロセスを開始できます。[mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) を呼び出してチャンネルのレプリケーションを停止し、レプリカからチャンネル設定を削除できます。

`mysql.rds_set_external_source_for_channel` を呼び出すと、Amazon RDS は、`set channel source` の時間、ユーザー、およびアクションをチャネル固有の詳細なしで `mysql.rds_history` テーブルに記録し、`mysql.rds_replication_status` テーブルにチャネル名を記録します。この情報は、内部使用およびモニタリングの目的でのみ記録されます。監査目的で完全なプロシージャ呼び出しを記録するには、アプリケーションの特定の要件に基づいて、監査ログまたは一般ログを有効にすることを検討してください。

### 例
<a name="mysql_rds_set_external_source_for_channel-examples"></a>

RDS for MySQL DB インスタンスで実行すると、次の例は、ホスト `sourcedb.example.com`とポート `3306` で指定されたソースからデータをレプリケートするように、この DB インスタンスで `channel_1` という名前のレプリケーションチャネルを設定します。

```
call mysql.rds_set_external_source_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  0,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_external_source_with_auto_position_for_channel"></a>

オプションのレプリケーション遅延を使用して、RDS for MySQL DB インスタンスのレプリケーションチャネルを設定します。このレプリケーションは、グローバルトランザクション識別子 (GTID) に基づきます。

**重要**  
この手順を実行するには、`autocommit` を有効にする必要があります。これを有効にするには、`autocommit` パラメータを `1` に設定します。パラメータの変更については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

### 構文
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
  , channel_name
);
```

### パラメータ
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL ソース DB インスタンスのホスト名または IP アドレス。

 *host\$1port*   
RDS for MySQL ソース DB インスタンスで使用されるポート。ポート番号を変換する Secure Shell (SSH) ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって発行されるポート番号を指定します。

 *replication\$1user\$1name*   
RDS for MySQL ソース DB インスタンスの `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つユーザーの ID。ソース DB インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

 *replication\$1user\$1password*   
`replication_user_name` で指定されたユーザー ID のパスワード。

 *ssl\$1encryption*   
レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。  
`SOURCE_SSL_VERIFY_SERVER_CERT` オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

 *delay*   
ソース DB インスタンスからのレプリケーションを遅延させる最小秒数。  
このパラメータの上限は 1 日 (86400 秒) です。

 *channel\$1name*   
レプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_set_external_source_with_auto_position_for_channel` を実行する必要があります。このプロシージャは、レプリケーションチャネルを作成するターゲット RDS for MySQL DB インスタンスで実行する必要があります。

`rds_set_external_source_with_auto_position_for_channel` を実行する前に、マルチソースレプリカに必要な権限を持つレプリケーションユーザーをソース DB インスタンスに設定します。マルチソースレプリカをソース DB インスタンスに接続するには、ソース DB インスタンスに対する `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つレプリケーションユーザーの `replication_user_name` および `replication_user_password` の値を指定する必要があります。

**ソース DB インスタンスでレプリケーションユーザーを設定するには**

1. 選択した MySQL クライアントを使用して、ソース DB インスタンスに接続し、レプリケーションに使用するユーザーアカウントを作成します。以下に例を示します。
**重要**  
セキュリティのベストプラクティスとして、次の例に示すプレースホルダー値以外のパスワードを指定します。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. ソース DB インスタンスで、`REPLICATION CLIENT` および `REPLICATION SLAVE` 権限をレプリケーションユーザーに付与します。次の例では、ドメインの 「repl\$1user」ユーザーに、すべてのデータベースの `REPLICATION CLIENT` および `REPLICATION SLAVE` 権限を付与します。

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

暗号化されたレプリケーションを使用するには、SSL 接続を使用するようにソース DB インスタンスを設定します。

`mysql.rds_set_external_source_with_auto_position_for_channel` を呼び出す前に、必ず [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_gtid_purged) を呼び出して、外部ソースから指定された GTID 範囲を持つ `gtid_purged` システム変数を設定します。

`mysql.rds_set_external_source_with_auto_position_for_channel` を呼び出して、Amazon RDS DB インスタンスを特定のチャネルのリードレプリカとして設定した後、このリードレプリカで [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) を呼び出して、そのチャネルのレプリケーションプロセスを開始できます。

`mysql.rds_set_external_source_with_auto_position_for_channel` を呼び出し、このレプリケーションチャネルを設定した後、レプリカに対して [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) を呼び出してチャネルでレプリケーションプロセスを開始できます。[mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) を呼び出してチャンネルのレプリケーションを停止し、レプリカからチャンネル設定を削除できます。

### 例
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-examples"></a>

RDS for MySQL DB インスタンスで実行すると、次の例は、この DB インスタンスで `channel_1` という名前のレプリケーションチャネルを設定して、ホスト `sourcedb.example.com` とポート `3306` で指定されたソースからデータをレプリケートします。最小レプリケーション遅延は 1 時間 (3,600 秒) に設定されます。つまり、ソース RDS for MySQL DB インスタンスからの変更は、少なくとも 1 時間はマルチソースレプリカに適用されません。

```
call mysql.rds_set_external_source_with_auto_position_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
<a name="mysql_rds_set_external_source_with_delay_for_channel"></a>

指定されたレプリケーション遅延を使用して、RDS for MySQL DB インスタンスのレプリケーションチャネルを設定します。

**重要**  
この手順を実行するには、`autocommit` を有効にする必要があります。これを有効にするには、`autocommit` パラメータを `1` に設定します。パラメータの変更については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

### 構文
<a name="mysql_rds_set_external_source_with_delay_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_delay_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
  , channel_name
);
```

### パラメータ
<a name="mysql_rds_set_external_source_with_delay_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL ソース DB インスタンスのホスト名または IP アドレス。

 *host\$1port*   
RDS for MySQL ソース DB インスタンスで使用されるポート。ポート番号を変換する Secure Shell (SSH) ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって発行されるポート番号を指定します。

 *replication\$1user\$1name*   
RDS for MySQL ソース DB インスタンスの `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つユーザーの ID。ソース DB インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

 *replication\$1user\$1password*   
`replication_user_name` で指定されたユーザー ID のパスワード。

 *mysql\$1binary\$1log\$1file\$1name*   
ソース DB インスタンスのバイナリログの名前には、レプリケーション情報が含まれています。

 *mysql\$1binary\$1log\$1file\$1location*   
`mysql_binary_log_file_name` バイナリログ内の場所。レプリケーションでは、この場所からレプリケーション情報の読み取りをスタートします。  
binlog ファイルの名前と場所は、`SHOW BINARY LOG STATUS`出典データベースインスタンス上で実行することによって決定できます。  
MySQL の旧バージョンは、`SHOW BINARY LOG STATUS` ではなく `SHOW MASTER STATUS` を使用していました。8.4 より前の MySQL バージョンを使用している場合は、`SHOW MASTER STATUS` を使用します。

 *ssl\$1encryption*   
レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。  
`SOURCE_SSL_VERIFY_SERVER_CERT` オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

 *delay*   
ソース DB インスタンスからのレプリケーションを遅延させる最小秒数。  
このパラメータの上限は 1 日 (86400 秒) です。

 *channel\$1name*   
レプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_set_external_source_with_delay_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_set_external_source_with_delay_for_channel` を実行する必要があります。このプロシージャは、レプリケーションチャネルを作成するターゲット RDS for MySQL DB インスタンスで実行する必要があります。

`mysql.rds_set_external_source_with_delay_for_channel` を実行する前に、マルチソースレプリカに必要な権限を持つレプリケーションユーザーをソース DB インスタンスに設定します。マルチソースレプリカをソース DB インスタンスに接続するには、ソース DB インスタンスに対する `REPLICATION CLIENT` および `REPLICATION SLAVE` アクセス許可を持つレプリケーションユーザーの `replication_user_name` および `replication_user_password` の値を指定する必要があります。

**ソース DB インスタンスでレプリケーションユーザーを設定するには**

1. 選択した MySQL クライアントを使用して、ソース DB インスタンスに接続し、レプリケーションに使用するユーザーアカウントを作成します。以下に例を示します。
**重要**  
セキュリティのベストプラクティスとして、次の例に示すプレースホルダー値以外のパスワードを指定します。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. ソース DB インスタンスで、`REPLICATION CLIENT` および `REPLICATION SLAVE` 権限をレプリケーションユーザーに付与します。次の例では、ドメインの 「repl\$1user」ユーザーに、すべてのデータベースの `REPLICATION CLIENT` および `REPLICATION SLAVE` 権限を付与します。

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

暗号化されたレプリケーションを使用するには、SSL 接続を使用するようにソース DB インスタンスを設定します。

`mysql.rds_set_external_source_with_delay_for_channel` を呼び出し、このレプリケーションチャネルを設定した後、レプリカに対して [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) を呼び出してチャネルでレプリケーションプロセスを開始できます。[mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) を呼び出してチャンネルのレプリケーションを停止し、レプリカからチャンネル設定を削除できます。

`mysql.rds_set_external_source_with_delay_for_channel` を呼び出すと、Amazon RDS は、`set channel source` の時間、ユーザー、およびアクションをチャネル固有の詳細なしで `mysql.rds_history` テーブルに記録し、`mysql.rds_replication_status` テーブルにチャネル名を記録します。この情報は、内部使用およびモニタリングの目的でのみ記録されます。監査目的で完全なプロシージャ呼び出しを記録するには、アプリケーションの特定の要件に基づいて、監査ログまたは一般ログを有効にすることを検討してください。

### 例
<a name="mysql_rds_set_external_source_with_delay_for_channel-examples"></a>

RDS for MySQL DB インスタンスで実行すると、次の例は、この DB インスタンスで `channel_1` という名前のレプリケーションチャネルを設定して、ホスト `sourcedb.example.com` とポート `3306` で指定されたソースからデータをレプリケートします。最小レプリケーション遅延は 1 時間 (3,600 秒) に設定されます。つまり、ソース RDS for MySQL DB インスタンスからの変更は、少なくとも 1 時間はマルチソースレプリカに適用されません。

```
call mysql.rds_set_external_source_with_delay_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_source_auto_position_for_channel"></a>

バイナリログファイルの位置、またはグローバルトランザクション識別子 (GTID) に基づいて、指定されたチャネルのレプリケーションモードを設定します。

### 構文
<a name="mysql_rds_set_source_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_source_auto_position_for_channel (
auto_position_mode
 , channel_name
);
```

### パラメータ
<a name="mysql_rds_set_source_auto_position_for_channel-parameters"></a>

 *auto\$1position\$1mode*   
ファイルの位置に基づくレプリケーション、または GTID ベースのレプリケーションかどうかを示す値:  
+ `0` - バイナリログファイルの位置に基づくレプリケーション方法を使用します。デフォルト: `0`。
+ `1` - GTID ベースのレプリケーション方法を使用します。

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_set_source_auto_position_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_set_source_auto_position_for_channel` を実行する必要があります。このプロシージャは、指定されたチャネルでレプリケーションを再起動して、指定された自動位置モードを適用します。

### 例
<a name="mysql_rds_set_source_auto_position_for_channel-examples"></a>

次の例は、channel\$11 の自動位置モードを、GTID ベースのレプリケーション方法を使用するように設定します。

```
call mysql.rds_set_source_auto_position_for_channel(1,'channel_1');
```

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
<a name="mysql_rds_set_source_delay_for_channel"></a>

指定されたチャネルについて、ソースデータベースインスタンスからマルチソースレプリカへのレプリケーションを遅延させる最小秒数を設定します。

### 構文
<a name="mysql_rds_set_source_delay_for_channel-syntax"></a>

```
CALL mysql.rds_set_source_delay_for_channel(delay, channel_name);
```

### パラメータ
<a name="mysql_rds_set_source_delay_for_channel-parameters"></a>

 *delay*   
ソース DB インスタンスからのレプリケーションを遅延させる最小秒数。  
このパラメータの上限は 1 日 (86400 秒) です。

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_set_source_delay_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_set_source_delay_for_channel` を実行する必要があります。このプロシージャを使用するには、まず、`mysql.rds_stop_replication_for_channel` を呼び出して、レプリケーションを停止します。次に、このプロシージャを呼び出して、レプリケーションの遅延値を設定します。遅延が設定されたら、`mysql.rds_start_replication_for_channel` を呼び出して、レプリケーションを再開します。

### 例
<a name="mysql_rds_set_source_delay_for_channel-examples"></a>

次の例は、マルチソースレプリカの `channel_1` のソースデータベースインスタンスからのレプリケーションの遅延を少なくとも 1 時間 (3,600 秒) に設定します。

```
CALL mysql.rds_set_source_delay_for_channel(3600,'channel_1');
```

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
<a name="mysql_rds_skip_repl_error_for_channel"></a>

バイナリログイベントをスキップし、指定したチャネルの MySQL DB マルチソースレプリカのレプリケーションエラーを削除します。

### 構文
<a name="mysql_rds_skip_repl_error_for_channel-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error_for_channel(channel_name);
```

### パラメータ
<a name="mysql_rds_skip_repl_error_for_channel-parameters"></a>

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_skip_repl_error_for_channel-usage-notes"></a>

マスターユーザーはリードレプリカに対して `mysql.rds_skip_repl_error_for_channel` プロシージャを実行する必要があります。`mysql.rds_skip_repl_error` を使用してリードレプリカのエラーをスキップする場合と同様の方法で、このプロシージャを使用できます。詳細については、「[mysql.rds\$1skip\$1repl\$1error の手順を呼び出します。](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure)」を参照してください。

**注記**  
GTID ベースのレプリケーションのエラーをスキップするには、代わりにプロシージャ [mysql.rds\$1skip\$1transaction\$1with\$1gtid ](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) を使用することをお勧めします。

MySQL の `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` コマンドを実行して、エラーがあるかどうかを判断します。レプリケーションエラーが重要ではない場合、`mysql.rds_skip_repl_error_for_channel` を実行して、エラーをスキップすることができます。複数のエラーがある場合、`mysql.rds_skip_repl_error_for_channel` は、指定されたレプリケーションチャネルの最初のエラーを削除してから、他にもエラーが存在することを警告します。その後で `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` を使用して、次のエラーに対処するための適切な対応方法を判断することができます。戻り値の詳細については、MySQL ドキュメントの「[SHOW REPLICA STATUS statement](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)」を参照してください。

## mysql.rds\$1start\$1replication\$1for\$1channel
<a name="mysql_rds_start_replication_for_channel"></a>

RDS for MySQL DB インスタンスから指定されたチャネルのマルチソースレプリカへのレプリケーションを開始します。

**注記**  
[mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel)、または [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel) ストアドプロシージャを使用して、RDS for MySQL DB インスタンスからレプリケーションをスタートし、指定したバイナリログファイルの場所でレプリケーションを停止できます。

### 構文
<a name="mysql_rds_start_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_for_channel(channel_name);
```

### パラメータ
<a name="mysql_rds_start_replication_for_channel-parameters"></a>

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_start_replication_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_start_replication_for_channel` を実行する必要があります。ソース RDS for MySQL DB インスタンスからデータをインポートした後、マルチソースレプリカでこのコマンドを実行して、指定したチャネルでレプリケーションを開始します。

### 例
<a name="mysql_rds_start_replication_for_channel-examples"></a>

次の例では、マルチソースレプリカの `channel_1` でレプリケーションを開始します。

```
CALL mysql.rds_start_replication_for_channel('channel_1');
```

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
<a name="mysql_rds_start_replication_until_for_channel"></a>

指定されたチャネルの RDS for MySQL DB インスタンスからレプリケーションを開始し、指定されたバイナリログファイルの場所でレプリケーションを停止します。

### 構文
<a name="mysql_rds_start_replication_until_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_for_channel (
replication_log_file
  , replication_stop_point
  , channel_name
);
```

### パラメータ
<a name="mysql_rds_start_replication_until_for_channel-parameters"></a>

 *replication\$1log\$1file*   
ソース DB インスタンスのバイナリログの名前には、レプリケーション情報が含まれています。

 *replication\$1stop\$1point *   
`replication_log_file` バイナリログ内でレプリケーションが停止する場所。

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_start_replication_until_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_start_replication_until_for_channel` を実行する必要があります。このプロシージャでは、レプリケーションが開始され、指定されたバイナリログファイルの位置に達すると停止します。このプロシージャでは、`SQL_THREAD` と `IO_THREAD` の両方が停止します。

`replication_log_file` パラメータで指定されたファイル名は、ソース DB インスタンスの binlog ファイル名と一致する必要があります。

`replication_stop_point` パラメータで指定した停止場所が過去の時点である場合、レプリケーションは即座に停止します。

### 例
<a name="mysql_rds_start_replication_until_for_channel-examples"></a>

次の例では、`channel_1` でレプリケーションを開始し、`mysql-bin-changelog.000777` バイナリログファイルの位置 `120` に達するまで変更をレプリケートします。

```
call mysql.rds_start_replication_until_for_channel(
  'mysql-bin-changelog.000777',
  120,
  'channel_1'
  );
```

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
<a name="mysql_rds_start_replication_until_gtid_for_channel"></a>

指定されたチャネルで RDS for MySQL DB インスタンスからレプリケーションを開始し、指定されたグローバルトランザクション識別子 (GTID) でレプリケーションを停止します。

### 構文
<a name="mysql_rds_start_replication_until_gtid_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid_for_channel(gtid,channel_name);
```

### パラメータ
<a name="mysql_rds_start_replication_until_gtid_for_channel-parameters"></a>

 *gtid*   
その後でレプリケーションを停止する GTID。

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_start_replication_until_gtid_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_start_replication_until_gtid_for_channel` を実行する必要があります。このプロシージャは、指定されたチャネルでレプリケーションを開始し、指定された GTID 値までのすべての変更を適用します。その後、チャンネルのレプリケーションを停止します。

`gtid`パラメータで指定したトランザクションがレプリカによって既に実行されている場合、レプリケーションは即座に停止します。

この手順を実行する前に、`replica_parallel_workers` または `slave_parallel_workers` の値を `0` に設定して、マルチスレッドレプリケーションを無効にする必要があります。

### 例
<a name="mysql_rds_start_replication_until_gtid_for_channel-examples"></a>

次の例では、`channel_1` でレプリケーションを開始し、GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23` に達するまで変更をレプリケートします。

```
call mysql.rds_start_replication_until_gtid_for_channel('3E11FA47-71CA-11E1-9E33-C80AA9429562:23','channel_1');
```

## mysql.rds\$1stop\$1replication\$1for\$1channel
<a name="mysql_rds_stop_replication_for_channel"></a>

指定されたチャネルで MySQL DB インスタンスからのレプリケーションを停止します。

### 構文
<a name="mysql_rds_stop_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_stop_replication_for_channel(channel_name);
```

### パラメータ
<a name="mysql_rds_stop_replication_for_channel-parameters"></a>

 *channel\$1name*   
マルチソースレプリカのレプリケーションチャネルの名前。各レプリケーションチャネルは、特定のホストとポートで実行されているシングルソース RDS for MySQL DB インスタンスからバイナリログイベントを受け取ります。

### 使用に関する注意事項
<a name="mysql_rds_stop_replication_for_channel-usage-notes"></a>

マスターユーザーが `mysql.rds_stop_replication_for_channel` を実行する必要があります。

### 例
<a name="mysql_rds_stop_replication_for_channel-examples"></a>

次の例では、マルチソースレプリカの `channel_1` でレプリケーションを停止します。

```
CALL mysql.rds_stop_replication_for_channel('channel_1');
```