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

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

バージョン 10.0.24 以降の外部 MariaDB インスタンスから RDS for MariaDB DB インスタンスへのグローバルなトランザクション識別子 (GTID) に基づいてレプリケーションを設定できます。Amazon RDS で外部ソースインスタンスとレプリカをセットアップする場合は、次のガイドラインに従ってください。

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

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

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

注記

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

外部のソースインスタンスと Amazon RDS 上の MariaDB DB インスタンス間でレプリケーションを開始するには、次の手順に従います。

レプリケーションを開始するには
  1. ソース MariaDB インスタンスを読み取り専用にします。

    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 インスタンスから MariaDB DB インスタンスにデータベースをコピーします。非常に大きなデータベースでは、「ダウンタイムを短縮して Amazon RDS for MySQL データベースにデータをインポートする」の手順を使用することが必要になる場合があります。

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

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

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

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

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

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

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

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

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

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

    host db_instance_endpoint

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

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

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

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

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

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  8. MariaDB DB インスタンスをレプリカにします。MariaDB DB インスタンスにマスターユーザーとして接続し、mysql.rds_set_external_master_gtid コマンドを使用して、外部の MariaDB データベースをレプリケーションソースインスタンスとして指定します。ステップ 2 で決定した GTID を使用します。以下に例を示します。

    CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
    注記

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

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

    CALL mysql.rds_start_replication;