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

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

バイナリログファイルのレプリケーションを使用して、RDS for MySQLまたは MariaDB DB インスタンスと Amazon RDS の外部にある MySQL または MariaDB インスタンスとの間でレプリケーションを設定できます。

開始する前に

レプリケートされたトランザクションのバイナリログファイルの位置を使用して、レプリケーションを設定できます。

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) 形式が必要な場合は binlog_formatROW または STATEMENT に設定する必要もあります。変更を適用するには、DB インスタンスを再起動します。

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

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

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

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

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

  • 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 MariaDB または MySQL 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';
  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);
    注記

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

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

    CALL mysql.rds_start_replication;