Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

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

Amazon RDS 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 データベースとのレプリケーションをセットアップする必要があります。

注記

外部インスタンスが MariaDB バージョン 10.0.2 以降で Amazon RDS インスタンスが MariaDB である場合以外は、このトピックの手順を使用してレプリケーションを設定します。この場合は、「Amazon RDS 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、OS X、Unix の場合:

    mysqldump --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u <local_user> \ -p<local_password> | mysql \ --host=hostname \ --port=3306 \ -u <RDS_user_name> \ -p<RDS_password>

    Windows の場合:

    mysqldump --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u <local_user> ^ -p<local_password> | mysql ^ --host=hostname ^ --port=3306 ^ -u <RDS_user_name> ^ -p<RDS_password>

    注記

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

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

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

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

    レプリケーションで使用するバックアップの作成の詳細については、MySQL のドキュメントの「読み取り専用にすることによるマスターまたはスレーブのバックアップ」を参照してください。

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

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

    host <RDS_MySQL_DB_host_name>

    ホスト名は 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 コマンドを使用して、外部の MySQL または MariaDB データベースをレプリケーションマスターとして指定します。ステップ 2 で特定したマスターログファイル名とマスターログの場所を使用します。次に例を示します。

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

    注記

    Amazon RDS MySQL では、mysql.rds_set_external_master_with_delay ストアドプロシージャを実行することで、遅延レプリケーションを使用できます。遅延レプリケーションを使用する 1 つの理由は、mysql.rds_start_replication_until ストアドプロシージャで災害対策を有効にすることです。現在、遅延レプリケーションは Amazon RDS 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 MySQL バージョン 5.7.23 以降でのみサポートされています。GTID ベースのレプリケーションは、Amazon RDS MySQL 5.5、5.6、または 8.0 ではサポートされていません。

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

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

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

      gtid_modeON

      enforce_gtid_consistencyON

      詳細については、MySQL ドキュメントの「グローバルトランザクション ID によるレプリケーション」、または 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、OS X、Unix の場合:

    mysqldump --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u <local_user> \ -p<local_password> | mysql \ --host=hostname \ --port=3306 \ -u <RDS_user_name> \ -p<RDS_password>

    Windows の場合:

    mysqldump --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u <local_user> ^ -p<local_password> | mysql ^ --host=hostname ^ --port=3306 ^ -u <RDS_user_name> ^ -p<RDS_password>

    注記

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

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

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

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

    レプリケーションで使用するバックアップの作成の詳細については、MySQL のドキュメントの「読み取り専用にすることによるマスターまたはスレーブのバックアップ」を参照してください。

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

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

    host <RDS_MySQL_DB_host_name>

    ホスト名は 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 MySQL では、mysql.rds_set_external_master_with_delay ストアドプロシージャを実行することで、遅延レプリケーションを使用できます。遅延レプリケーションを使用する 1 つの理由は、mysql.rds_start_replication_until_gtid ストアドプロシージャで災害対策を有効にすることです。現在、遅延レプリケーションは Amazon RDS MariaDB でサポートされていません。

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

    CALL mysql.rds_start_replication;