MariaDB を使用したレプリケーションフィルターの設定 - Amazon Relational Database Service

MariaDB を使用したレプリケーションフィルターの設定

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

レプリケーションフィルターの使用例は以下のとおりです。

  • リードレプリカのサイズを縮小します。レプリケーションフィルタリングを使用すると、リードレプリカで必要のないデータベースとテーブルを除外できます。

  • セキュリティ上の理由から、データベースとテーブルをリードレプリカから除外するため。

  • 異なるリードレプリカで、特定のユースケースごとにさまざまなデータベースとテーブルを複製するため。例えば、分析やシャーディングに特定のリードレプリカを使用できます。

  • 異なる AWS リージョン にリードレプリカがある DB インスタンスで、異なる AWS リージョン に異なるデータベースまたはテーブルを複製する場合。

注記

また、レプリケーションフィルターを使用して、インバウンドのレプリケーショントポロジでレプリカとして設定されているプライマリ MariaDB DB インスタンスでレプリケートするデータベースとテーブルを指定することもできます。この設定の詳細については、「外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定」を参照してください。

RDS for MariaDB のレプリケーションフィルターパラメータの設定

レプリケーションフィルターを構成するには、リードレプリカに次のレプリケーションフィルターのパラメータを設定します。

  • 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 パラメータが設定されている場合、このパラメータは評価されません。

パラメータは、記載されている順序に沿って評価されます。これらのパラメータの詳細な仕組みについては、MariaDB のドキュメントを参照してください。

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

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

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

注記

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

RDS for MariaDB のレプリケーションフィルターの制限

RDS for MariaDB のレプリケーションフィルターには、次の制限が適用されます。

  • 各レプリケーションフィルターのパラメータには、2,000 文字といった制限があります。

  • レプリケーションフィルターでは、カンマはサポートされていません。

  • MariaDB binlog_do_db とバイナリログフィルターの binlog_ignore_db オプションはサポートされていません。

  • レプリケーションフィルタリングは、XA トランザクションをサポートしていません。

    詳細については、MySQL ドキュメントの「Restrictions on XA Transactions」を参照してください。

  • RDS for MariaDB バージョン 10.2 では、レプリケーションフィルターはサポートされていません。

RDS for MariaDB のレプリケーションフィルターの例

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

注記

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

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

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

以下の例では、レプリケーションフィルターを設定します。

例 レプリケーションにデータベースを含める

次の例では、レプリケーションに mydb1 データベースと mydb2 データベースが含まれています。リードレプリカに対して replicate-do-db を設定すると、パラメータで指定されたデータベースだけがレプリケートされます。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
例 レプリケーションにテーブルを含める

次の例では、データベース mydb1table1 テーブルと table2 テーブルをレプリケーションに含めています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
例 ワイルドカードの文字を使用してレプリケーションにテーブルを含める

次の例では、データベース mydborders および returns で始まる名前のテーブルをレプリケーションに含めています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
例 名前のワイルドカード文字のエスケープ

次の例は、エスケープ文字 \ を使用して、名前の一部であるワイルドカードの文字をエスケープする方法を示しています。

データベース mydb1 には my_table で始まる複数のテーブル名があり、これらのテーブルをレプリケーションに含めることを想定しています。テーブル名には、ワイルドカードの文字でもあるアンダースコアが含まれているため、この例ではテーブル名のアンダースコアをエスケープしています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
例 レプリケーションからデータベースを除外する

次の例では、mydb1 データベースと mydb2 データベースをレプリケーションから除外しています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
例 レプリケーションからテーブルを除外する

次の例では、データベース table1 のテーブル table2mydb1 をレプリケーションから除外しています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
例 ワイルドカードの文字を使用したレプリケーションからテーブルを除外する

次の例では、データベース mydborders および returns で始まる名前のテーブルをレプリケーションから除外しています。

Linux、macOS、Unix の場合:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"

Windows の場合:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myparametergroup ^ --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"

リードレプリカのレプリケーションフィルターを表示する

リードレプリカのレプリケーションフィルターは、次の方法で表示できます。

  • リードレプリカに関連付けられているパラメータグループのレプリケーションフィルタリングパラメータの設定を確認してください。

    手順については、「Amazon RDS のDB パラメータグループのパラメータ値の表示」を参照してください。

  • MariaDB クライアントで、リードレプリカに接続し、SHOW REPLICA STATUS ステートメントを実行します。

    出力の次のフィールドには、リードレプリカのレプリケーションフィルターが表示されます。

    • Replicate_Do_DB

    • Replicate_Ignore_DB

    • Replicate_Do_Table

    • Replicate_Ignore_Table

    • Replicate_Wild_Do_Table

    • Replicate_Wild_Ignore_Table

    これらのフィールドの詳細については、MySQL のドキュメントの Checking Replication Status を参照してください。

    注記

    MariaDB の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。10.5 より前の MariaDB バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。