メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

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

Amazon RDS MySQL または MariaDB DB インスタンスと Amazon RDS の外部にある MySQL または MariaDB インスタンスとの間でレプリケーションをセットアップできます。外部インスタンスが 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 インスタンスのバックアップと復元」を参照してください。

注記

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

外部のマスターインスタンスと Amazon RDS 上の DB インスタンス間でレプリケーションを開始する

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

    Copy
    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. ソース MySQL または MariaDB インスタンスで SHOW MASTER STATUS コマンドを実行して、binlog の場所を特定します。次の例のような出力を受け取ります。

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

    Linux、OS X、Unix の場合:

    Copy
    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 の場合:

    Copy
    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 オプションと入力するパスワードの間にスペースがないことを確認します。

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

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

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

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

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

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

    Copy
    host <RDS_MySQL_DB_host_name>

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

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

    Copy
    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  7. 外部のインスタンスについて、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。たとえば、すべてのデータベースに対する REPLICATION CLIENTREPLICATION SLAVE の特権を、「repl_user」ユーザーに付与するには、次のコマンドを実行します。

    Copy
    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 で特定したマスターログファイル名とマスターログの場所を使用します。次に例を示します。

    Copy
    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);
  9. Amazon RDS DB インスタンスで、mysql.rds_start_replication コマンドを実行してレプリケーションを開始します。

    Copy
    CALL mysql.rds_start_replication;