

# Aurora MySQL でのレプリケーションフィルターの設定
<a name="AuroraMySQL.Replication.Filters"></a>

レプリケーションフィルターを使用して、リードレプリカでレプリケートするデータベースとテーブルを指定できます。レプリケーションフィルターは、データベースとテーブルをレプリケーションに含めることも、レプリケーションから除外することもできます。

レプリケーションフィルターの使用例は以下のとおりです。
+ リードレプリカのサイズを縮小します。レプリケーションフィルタリングを使用すると、リードレプリカで必要のないデータベースとテーブルを除外できます。
+ セキュリティ上の理由から、データベースとテーブルをリードレプリカから除外するため。
+ 異なるリードレプリカで、特定のユースケースごとにさまざまなデータベースとテーブルを複製するため。例えば、分析やシャーディングに特定のリードレプリカを使用できます。
+ 異なる AWS リージョン にリードレプリカがある DB クラスターで、異なる AWS リージョン に異なるデータベースまたはテーブルを複製するには。
+ インバウンドレプリケーショントポロジでレプリカとして設定されている Aurora MySQL DB クラスターでレプリケートするデータベースとテーブルを指定するには。この設定の詳細については、「[Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション (バイナリログレプリケーション)](AuroraMySQL.Replication.MySQL.md)」を参照してください。

**Topics**
+ [Aurora MySQL のレプリケーションフィルターパラメータの設定](#AuroraMySQL.Replication.Filters.Configuring)
+ [Aurora MySQL のレプリケーションフィルターの制限](#AuroraMySQL.Replication.Filters.Limitations)
+ [Aurora MySQL のレプリケーションフィルターの例](#AuroraMySQL.Replication.Filters.Examples)
+ [リードレプリカのレプリケーションフィルターを表示する](#AuroraMySQL.Replication.Filters.Viewing)

## Aurora MySQL のレプリケーションフィルターパラメータの設定
<a name="AuroraMySQL.Replication.Filters.Configuring"></a>

レプリケーションフィルターを設定するには、次のパラメータを設定します。
+ `binlog-do-db` - 指定されたバイナリログテーブルに変更を複製します。バイナリログソースクラスターに対してこのパラメータを設定すると、パラメータで指定されたバイナリログのみが複製されます。
+ `binlog-ignore-db` - 指定されたバイナリログテーブルに変更を複製しません。バイナリログソースクラスターに対して `binlog-do-db` パラメータが設定されている場合、このパラメータは評価されません。
+ `replicate-do-db` - 指定したデータベースに変更を複製します。バイナリログソースクラスターに対してこのパラメータを設定すると、パラメータで指定されたデータベースのみが複製されます。
+ `replicate-ignore-db` - 指定したデータベースに変更を複製しないでください。バイナリログレプリカスクラスターに対して `replicate-do-db` パラメータが設定されている場合、このパラメータは評価されません。
+ `replicate-do-table` -指定されたテーブルに変更を複製します。このパラメータをリードレプリカに設定した場合、パラメータで指定したテーブルのみが複製されます。また、`replicate-do-db` または `replicate-ignore-db` パラメータが設定されている場合は、指定されたテーブルを含むデータベースを、必ずバイナリログレプリカクラスターのレプリケーションに含めます。
+ `replicate-ignore-table` - 指定したテーブルに変更を複製しないでください。バイナリログレプリカスクラスターに対して `replicate-do-table` パラメータが設定されている場合、このパラメータは評価されません。
+ `replicate-wild-do-table` - 指定したデータベースおよびテーブル名のパターンに基づいてテーブルを複製します。`%` および `_` ワイルドカードの文字がサポート対象となります。`replicate-do-db` または `replicate-ignore-db` パラメータが設定されている場合は、指定されたテーブルを含むデータベースを、必ずバイナリログレプリカクラスターのレプリケーションに含めます。
+ `replicate-wild-ignore-table` - 指定したデータベースおよびテーブル名のパターンに基づいてテーブルを複製しないでください。`%` および `_` ワイルドカードの文字がサポート対象となります。バイナリログレプリカスクラスターに対して `replicate-do-table` または `replicate-wild-do-table` パラメータが設定されている場合、このパラメータは評価されません。

パラメータは、記載されている順序に沿って評価されます。これらのパラメータの詳細な仕組みについては、MySQL のドキュメントを参照してください。
+ 一般的な情報については、[ Replica Server Options and Variables](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html) を参照してください。
+ データベースレプリケーションのフィルターパラメータを評価する方法については、[ Evaluation of Database-Level Replication and Binary Logging Options](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-db-options.html) を参照してください。
+ テーブルレプリケーションのフィルターパラメータを評価する方法については、[Evaluation of Table-Level Replication Options](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-table-options.html) を参照してください。

デフォルトでは、これらの各パラメータの値は空です。各バイナリログクラスターで、これらのパラメータを使用してレプリケーションフィルターを設定、変更、削除することができます。これらのパラメータの 1 つを設定する場合は、各フィルターを他のフィルターとコンマで区切ります。

`%` および `_` パラメータで `replicate-wild-do-table` および `replicate-wild-ignore-table` ワイルドカードの文字を使用できます。`%` ワイルドカードは任意の文字数と一致し、`_` ワイルドカードは 1 文字のみと一致します。

ソース DB インスタンスのバイナリログ形式は、データ変更のレコードを決定するため、レプリケーションでは重要です。`binlog_format` パラメータの設定により、レプリケーションが行ベースかステートメントベースかが決まります。詳細については、「[シングル AZ データベースの Aurora MySQL バイナリログの設定](USER_LogAccess.MySQL.BinaryFormat.md)」を参照してください。

**注記**  
ソース DB インスタンスの `binlog_format` 設定に関係なく、すべてのデータ定義言語 (DDL) ステートメントはステートメントとして複製されます。

## Aurora MySQL のレプリケーションフィルターの制限
<a name="AuroraMySQL.Replication.Filters.Limitations"></a>

Aurora MySQL のレプリケーションフィルターには、次の制限が適用されます。
+ レプリケーションフィルターは、Aurora MySQL バージョン 3 でのみサポートされます。
+ 各レプリケーションフィルターのパラメータには、2,000 文字といった制限があります。
+ レプリケーションフィルターでは、カンマはサポートされていません。
+ レプリケーションフィルタリングは、XA トランザクションをサポートしていません。

  詳細については、MySQL ドキュメントの「[Restrictions on XA Transactions](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)」を参照してください。

## Aurora MySQL のレプリケーションフィルターの例
<a name="AuroraMySQL.Replication.Filters.Examples"></a>

リードレプリカのレプリケーションフィルタリングを設定するには、リードレプリカに関連付けられている DB クラスターパラメータグループのレプリケーションフィルタリングパラメータを変更します。

**注記**  
デフォルトの DB クラスターパラメータグループを変更することはできません。リードレプリカがデフォルトのパラメータグループを使用している場合は、新しいパラメータグループを作成してリードレプリカに関連付けます。DB クラスターパラメータグループの詳細については、「[Amazon Aurora のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して、DB クラスターパラメータグループのパラメータを設定できます。パラメータの設定の詳細については、「[Amazon Aurora の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。DB クラスターパラメータグループのパラメータを設定すると、そのパラメータグループに関連付けられているすべての DB クラスターがパラメータ設定を使用します。DB クラスターパラメータグループでレプリケーションフィルタリングパラメータを設定する場合は、パラメータグループがリードレプリカクラスターにのみ関連付けられていることを確認してください。ソース DB インスタンスのレプリケーションフィルターのパラメータは空のままにします。

次の例では、AWS CLI を使用してパラメータを設定します。これらの例では、CLI コマンドが完了した直後にパラメータの変更が行われるように `ApplyMethod` を `immediate` に設定しています。リードレプリカの再起動後に保留中の変更を適用する場合は、`ApplyMethod` を `pending-reboot` に設定します。

以下の例では、レプリケーションフィルターを設定します。
+ [Including databases in replication](#rep-filter-in-dbs-ams)
+ [Including tables in replication](#rep-filter-in-tables-ams)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-ams)
+ [Excluding databases from replication](#rep-filter-ex-dbs-ams)
+ [Excluding tables from replication](#rep-filter-ex-tables-ams)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-ams)<a name="rep-filter-in-dbs-ams"></a>

**Example レプリケーションにデータベースを含める**  
次の例では、レプリケーションに `mydb1` データベースと `mydb2` データベースを含めています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-ams"></a>

**Example レプリケーションにテーブルを含める**  
次の例では、データベース `mydb1` の `table1` テーブルと `table2` テーブルをレプリケーションに含めています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-wildcards-ams"></a>

**Example ワイルドカードの文字を使用してレプリケーションにテーブルを含める**  
次の例では、データベース `mydb` の `order` および `return` で始まる名前のテーブルをレプリケーションに含めています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```<a name="rep-filter-ex-dbs-ams"></a>

**Example レプリケーションからデータベースを除外する**  
次の例では、`mydb5` データベースと `mydb6` データベースをレプリケーションから除外しています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6,ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-ams"></a>

**Example レプリケーションからテーブルを除外する**  
次の例では、データベース `mydb5` のテーブル `table1` とデータベース `mydb6` の `table2` をレプリケーションから除外しています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-wildcards-ams"></a>

**Example ワイルドカードの文字を使用したレプリケーションからテーブルを除外する**  
次の例では、データベース `mydb7` の `order` および `return` で始まる名前のテーブルをレプリケーションから除外しています。  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```
Windows の場合:  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```

## リードレプリカのレプリケーションフィルターを表示する
<a name="AuroraMySQL.Replication.Filters.Viewing"></a>

リードレプリカのレプリケーションフィルターは、次の方法で表示できます。
+ リードレプリカに関連付けられているパラメータグループのレプリケーションフィルタリングパラメータの設定を確認してください。

  手順については、「[Amazon Aurora のDB パラメータグループのパラメータ値の表示](USER_WorkingWithParamGroups.Viewing.md)」を参照してください。
+ MySQL クライアントで、リードレプリカに接続し、`SHOW REPLICA STATUS` ステートメントを実行します。

  出力の次のフィールドには、リードレプリカのレプリケーションフィルターが表示されます。
  + `Binlog_Do_DB`
  + `Binlog_Ignore_DB`
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  これらのフィールドの詳細については、MySQL のドキュメントの [Checking Replication Status](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html) を参照してください。