Amazon RDS の外部で実行される MySQL または MariaDB インスタンスとのレプリケーション - Amazon Relational Database Service

Amazon RDS の外部で実行される MySQL または MariaDB インスタンスとのレプリケーション

Amazon RDS for MySQL または MariaDB DB インスタンスと Amazon RDS の外部にある MySQL または MariaDB インスタンスとの間でレプリケーションを設定できます。

開始する前に

レプリケートされたトランザクションのバイナリログファイルの位置を使用して、レプリケーションを設定できます。Amazon RDS MySQL 5.7.23 以降では、グローバルトランザクション識別子 (GTID) を使用したレプリケーションを設定することもできます。

Amazon RDS DB インスタンスでレプリケーションを開始するために必要なアクセス権限は限定されており、Amazon RDS マスターユーザーは利用できません。そのため、Amazon RDS の mysql.rds_set_external_master コマンドと mysql.rds_start_replication コマンドを使用して、ライブデータベースと Amazon RDS のデータベースのレプリケーションを設定する必要があります。

MySQL または MariaDB データベースにバイナリログ形式を設定するには、binlog_format パラメータを更新します。DB インスタンスがデフォルト DB インスタンスパラメータグループを使用している場合、新しい DB パラメータグループを作成して binlog_format 設定を変更します。binlog_format のデフォルト設定の MIXED を使用することをお勧めします。ただし、特定バイナリログ形式が必要な場合は binlog_formatROW または STATEMENT に設定する必要もあります。変更を適用するには、DB インスタンスを再起動します。

binlog_format パラメータの設定については、バイナリログ形式の設定 を参照してください。さまざまな MySQL レプリケーションタイプの詳細については、MySQL ドキュメントの「ステートメントベースおよび行ベースレプリケーションのメリットとデメリット」を参照してください。

注記

外部インスタンスが MariaDB バージョン 10.0.24 以降で Amazon RDS インスタンスが MariaDB である場合以外は、このトピックの手順を使用してレプリケーションを設定します。この場合は、「MariaDB DB インスタンスへの GTID ベースレプリケーションの設定」の手順を使用して GTID ベースのレプリケーションをセットアップします。

外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定

Amazon RDS で外部ソースインスタンスとレプリカをセットアップする場合は、次のガイドラインに従ってください。

  • レプリカである Amazon RDS DB インスタンスのフェイルオーバーのイベントをモニタリングします。フェイルオーバーが発生すると、レプリカである DB インスタンスが、新しいホスト上に別のネットワークアドレスで再作成されます。フェイルオーバーイベントをモニタリングする方法については、「Amazon RDS イベント通知の使用」を参照してください。

  • ソースインスタンスのバイナリログ (binlog) は、それらがレプリカに適用されていることを確認するまで保持します。このメンテナンスによって、障害発生時にソースインスタンスを復元できます。

  • Amazon RDS DB インスタンスにある自動バックアップを有効にします。自動バックアップを有効にすると、ソースインスタンスとレプリカを再同期する必要がある場合に、特定の時点にレプリカを復元できます。バックアップと特定の時点への復元の詳細については、「Amazon RDS DB インスタンスのバックアップと復元」を参照してください。

外部ソースインスタンスを使用してバイナリログファイルのレプリケーションを設定するには

  1. ソース MySQL または MariaDB インスタンスを読み取り専用にします。

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. ソース MySQL または MariaDB インスタンスで SHOW MASTER STATUS コマンドを実行して、binlog の場所を特定します。

    次の例のような出力を受け取ります。

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. mysqldump を使用して、外部のインスタンスから Amazon RDS DB インスタンスにデータベースをコピーします。非常に大きなデータベースでは、「ダウンタイムを短縮して Amazon RDS MySQL または MariaDB DB インスタンスにデータをインポートする」の手順を使用することが必要になる場合があります。

    Linux、macOS、Unix の場合:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Windows の場合:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    注記

    -p オプションと入力するパスワードの間にスペースがないことを確認します。

    Amazon RDS DB インスタンスに接続するためのホスト名、ユーザー名、ポート、およびパスワードを指定するには、--host コマンドで --user (-u)--port-p および mysql オプションを使用します。ホスト名は Amazon RDS DB インスタンスのエンドポイントのドメインネームサービス (DNS) 名 (例: myinstance.123456789012.us-east-1.rds.amazonaws.com) です。エンドポイントの値は、AWS Management Console のインスタンスの詳細で確認できます。

  4. もう一度ソース MySQL または MariaDB インスタンスを書き込み可能にします。

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    レプリケーションで使用するバックアップの作成の詳細については、MySQL ドキュメントを参照してください。

  5. AWS Management Console で、外部のデータベースをホストするサーバーの IP アドレスを、Amazon RDS DB インスタンスの VPC セキュリティグループに追加します。VPC セキュリティグループの変更方法の詳細については、Amazon Virtual Private Cloudユーザーガイドの「VPC のセキュリティグループ」を参照してください。

    以下の条件が満たされると、IP アドレスが変更される場合があります。

    • 外部ソースインスタンスと DB インスタンス間の通信にパブリック IP アドレスを使用している。

    • 外部ソースインスタンスが停止して再起動した。

    これらの条件が満たされている場合は、追加する前に IP アドレスを確認してください。

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

    host db_instance_endpoint

    ホスト名は Amazon RDS DB インスタンスのエンドポイントの DNS 名です。

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

    MySQL 5.5、5.6、および 5.7

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY 'password';
  7. 外部の インスタンスについて、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。例えば、すべてのデータベースに対する REPLICATION CLIENT および REPLICATION SLAVE 権限を "repl_user" ユーザーに付与するには、以下のコマンドを実行します。

    MySQL 5.5、5.6、および 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  8. Amazon RDS DB インスタンスをレプリカにします。これを行うには、まず、マスターユーザーとして Amazon RDS の DB インスタンスに接続します。次に、mysql.rds_set_external_master コマンドを使用して、外部の MySQL または MariaDB データベースをソースインスタンスとして指定します。ステップ 2 で特定したマスターログファイル名とマスターログの場所を使用します。次に例を示します。

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    注記

    Amazon RDS for MySQL では、代わりに mysql.rds_set_external_master_with_delay ストアドプロシージャを実行することで、遅延レプリケーションを使用するよう選択できます。遅延レプリケーションを使用する 1 つの理由は、mysql.rds_start_replication_until ストアドプロシージャで災害対策を有効にすることです。現在、遅延レプリケーションは RDS for MariaDB でサポートされていません。

  9. Amazon RDS DB インスタンスで、mysql.rds_start_replication コマンドを実行してレプリケーションを開始します。

    CALL mysql.rds_start_replication;

外部ソースインスタンスを使用した GTID ベースのレプリケーションを設定する

Amazon RDS で外部ソースインスタンスとレプリカを設定する場合、レプリカである Amazon RDS DB インスタンスのフェイルオーバーイベントをモニタリングします。フェイルオーバーが発生すると、レプリカである DB インスタンスが、新しいホスト上に別のネットワークアドレスで再作成されます。フェイルオーバーイベントをモニタリングする方法については、「Amazon RDS イベント通知の使用」を参照してください。

重要

GTID ベースのレプリケーションは、Amazon RDS for MySQL バージョン 5.7.23 および MySQL 5.7 バージョン以降でのみサポートされています。GTID ベースのレプリケーションは、Amazon RDS for MySQL 5.6 または 8.0 ではサポートされていません。

外部ソースインスタンスを使用して GTID ベースのレプリケーションを設定するには

  1. GTID ベースのレプリケーションを準備します。

    1. 外部 MySQL または MariaDB データベースで GTID ベースのレプリケーションが有効になっていることを確認してください。これを行うには、外部データベースの次のパラメータが指定された値に設定されていることを確認します。

      gtid_modeON

      enforce_gtid_consistencyON

      詳細については、MySQL ドキュメントの「グローバルトランザクション識別子を使用したレプリケーション」、または MariaDB のドキュメントの「グローバルトランザクション ID」を参照してください。

    2. DB インスタンスに関連付けられたパラメータグループに次のパラメータ設定があることを確認します。

      • gtid_modeONON_PERMISSIVE、または OFF_PERMISSIVE

      • enforce_gtid_consistencyON

      パラメータグループの詳細については、「DB パラメータグループを使用する」を参照してください。

    3. DB インスタンスのパラメータグループを変更した場合は、DB インスタンスを再起動します。詳細については、「DB インスタンスの再起動」を参照してください。

  2. ソース MySQL または MariaDB インスタンスを読み取り専用にします。

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. mysqldump を使用して、外部のインスタンスから Amazon RDS DB インスタンスにデータベースをコピーします。非常に大きなデータベースでは、「ダウンタイムを短縮して Amazon RDS MySQL または MariaDB DB インスタンスにデータをインポートする」の手順を使用することが必要になる場合があります。

    Linux、macOS、Unix の場合:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Windows の場合:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    注記

    -p オプションと入力するパスワードの間にスペースがないことを確認します。

    Amazon RDS DB インスタンスに接続するためのホスト名、ユーザー名、ポート、およびパスワードを指定するには、--host コマンドで --user (-u)--port-p および mysql オプションを使用します。ホスト名は Amazon RDS DB インスタンスのエンドポイントの DNS 名 (例: myinstance.123456789012.us-east-1.rds.amazonaws.com) です。エンドポイントの値は、AWS Management Console のインスタンスの詳細で確認できます。

  4. もう一度ソース MySQL または MariaDB インスタンスを書き込み可能にします。

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    レプリケーションで使用するバックアップの作成の詳細については、MySQL ドキュメントを参照してください。

  5. AWS Management Console で、外部のデータベースをホストするサーバーの IP アドレスを、Amazon RDS DB インスタンスの VPC セキュリティグループに追加します。VPC セキュリティグループの変更方法の詳細については、Amazon Virtual Private Cloudユーザーガイドの「VPC のセキュリティグループ」を参照してください。

    以下の条件が満たされると、IP アドレスが変更される場合があります。

    • 外部ソースインスタンスと DB インスタンス間の通信にパブリック IP アドレスを使用している。

    • 外部ソースインスタンスが停止して再起動した。

    これらの条件が満たされている場合は、追加する前に IP アドレスを確認してください。

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

    host db_instance_endpoint

    ホスト名は Amazon RDS DB インスタンスのエンドポイントの DNS 名です。

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

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. 外部の インスタンスについて、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。例えば、すべてのデータベースに対する REPLICATION CLIENT および REPLICATION SLAVE 権限を "repl_user" ユーザーに付与するには、以下のコマンドを実行します。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Amazon RDS DB インスタンスをレプリカにします。これを行うには、まず、マスターユーザーとして Amazon RDS の DB インスタンスに接続します。次に、mysql.rds_set_external_master_with_auto_position コマンドを使用して、外部の MySQL または MariaDB データベースをレプリケーションプライマリインスタンスとして指定します。次に例を示します。

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 0, 0);
    注記

    Amazon RDS for MySQL では、代わりに mysql.rds_set_external_master_with_delay ストアドプロシージャを実行することで、遅延レプリケーションを使用するよう選択できます。遅延レプリケーションを使用する 1 つの理由は、mysql.rds_start_replication_until_gtid ストアドプロシージャで災害対策を有効にすることです。現在、遅延レプリケーションは RDS for MariaDB でサポートされていません。

  9. Amazon RDS DB インスタンスで、mysql.rds_start_replication コマンドを実行してレプリケーションを開始します。

    CALL mysql.rds_start_replication;