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

Amazon RDS MariaDB DB インスタンスへの GTID ベースレプリケーションの設定

バージョン 10.0.24 以降の外部 MariaDB インスタンスの外部から、Amazon RDS MariaDB DB インスタンスに GTID ベースのレプリケーションをセットアップできます。外部のレプリケーションマスターと Amazon RDS にあるレプリカをセットアップする場合、以下のガイドラインに従ってください。

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

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

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

注記

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

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

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

    Copy
    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 外部 MariaDB インスタンスの現在の GTID を取得します。mysql または選択したクエリエディタを使用して SELECT @@gtid_current_pos; を実行することで、取得できます。

    GTID は、<domain-id>-<server-id>-<sequence-id> の形式となります。 一般的な GTID は 0-1234510749-1728 のようになります。 GTID とコンポーネント部分の詳細については、MariaDB ドキュメントの「グローバルトランザクション ID」を参照してください。

  3. mysqldump を使用して、外部 MariaDB インスタンスから Amazon RDS MariaDB 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 MariaDB DB インスタンスに接続するためのホスト名、ユーザー名、ポート、パスワードを指定します。 ホスト名は Amazon RDS MariaDB DB インスタンスのエンドポイントの DNS 名 (例: myinstance.123456789012.us-east-1.rds.amazonaws.com) です。 エンドポイントの値は、Amazon RDS マネジメントコンソールのインスタンスの詳細で確認できます。

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

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

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

    Copy
    host <RDS_MariaDB_DB_host_name>

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

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

    Copy
    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  7. 外部の MariaDB インスタンスについて、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 MariaDB DB インスタンスをレプリカにします。Amazon RDS MariaDB DB インスタンスにマスターユーザーとして接続し、mysql.rds_set_external_master_gtid コマンドを使用して、外部の MariaDB データベースをレプリケーションマスターとして指定します。ステップ 2 で決定した GTID を使用します。次に例を示します。

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

    Copy
    CALL mysql.rds_start_replication;