バイナリログレプリケーションの設定、開始、停止 - Amazon Relational Database Service

バイナリログレプリケーションの設定、開始、停止

以下のストアドプロシージャは、トランザクションが外部データベースから RDS for MySQL、または RDS for MySQL から外部データベースに複製される方法を制御します。

mysql.rds_next_master_log

出典データベースインスタンスのログの位置を、出典データベースインスタンスの次のバイナリログの先頭に変更します。このプロシージャは、リードレプリカでレプリケーション I/O エラー 1236 が発生した場合にのみ使用してください。

構文

CALL mysql.rds_next_master_log( curr_master_log );

パラメータ

curr_master_log

現在のマスターログファイルのインデックス。例えば、現在のファイルが mysql-bin-changelog.012345 という名前の場合は、インデックスは 12345 になります。現在のマスターログファイルの名前を調べるには、SHOW REPLICA STATUS コマンドを実行し、Master_Log_File フィールドを確認します。

注記

MySQL の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

使用に関する注意事項

マスターユーザーが mysql.rds_next_master_log を実行する必要があります。

警告

mysql.rds_next_master_log は、レプリケーション出典であるマルチ AZ DB インスタンスのフェイルオーバーの後でレプリケーションが失敗し、Last_IO_ErrnoSHOW REPLICA STATUS フィールドが I/O エラー 1236 を示している場合にのみ呼び出してください。

mysql.rds_next_master_log を呼び出すと、フェイルオーバーイベントが発生する前にソースインスタンスのトランザクションがディスク上のバイナリログに書き込まれなかった場合、リードレプリカのデータが失われる可能性があります。

ソースインスタンスのパラメータ sync_binlog および innodb_support_xa1 に設定することで、このような問題が発生する可能性を減らすことができますが、パフォーマンスが低下する恐れがあります。詳しくは、「MySQL リードレプリカに関する問題のトラブルシューティング」を参照してください。

RDS for MySQL リードレプリカでレプリケーションが失敗すると仮定します。リードレプリカで SHOW REPLICA STATUS\G を実行すると、次の結果が返されます。

*************************** 1. row *************************** Replica_IO_State: Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com Source_User: MasterUser Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin-changelog.012345 Read_Source_Log_Pos: 1219393 Relay_Log_File: relaylog.012340 Relay_Log_Pos: 30223388 Relay_Source_Log_File: mysql-bin-changelog.012345 Replica_IO_Running: No Replica_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Source_Log_Pos: 30223232 Relay_Log_Space: 5248928866 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed: No Source_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Master: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 67285976

Last_IO_Errno フィールドはインスタンスが I/O エラー 1236 を受け取ったことを示します。Master_Log_File フィールドは、ファイル名が mysql-bin-changelog.012345 であることを示しています。これは、ログファイルのインデックスが 12345 であることを表しています。エラーを解決するには、次のパラメータを使用して mysql.rds_next_master_log を呼び出すことができます。

CALL mysql.rds_next_master_log(12345);
注記

MySQL の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

mysql.rds_reset_external_master

RDS for MySQL DB インスタンスを、Amazon RDS の外部で実行している MySQL インスタンスのリードレプリカとして使用しないように再設定します。

重要

この手順を実行するには、autocommit を有効にする必要があります。これを有効にするには、autocommit パラメータを 1 に設定します。パラメータの変更については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

構文

CALL mysql.rds_reset_external_master;

使用に関する注意事項

マスターユーザーが mysql.rds_reset_external_master を実行する必要があります。このプロシージャは、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとしての設定が解除される MySQL DB インスタンス上で実行する必要があります。

注記

可能な場合は、2 つの Amazon RDS DB インスタンス間のレプリケーションを管理するために、リードレプリカを使用することをお勧めします。その場合、このプロシージャとレプリケーション関連のストアドプロシージャだけを使用することをお勧めします。これらのプラクティスにより、Amazon RDS DB インスタンス間で、より複雑なレプリケーショントポロジが有効になります。これらのストアドプロシージャは、主に Amazon RDS 外部で実行されている MySQL インスタンスのレプリケーションの有効化のために提供されています。Amazon RDS DB インスタンス間でのレプリケーションの管理の詳細については、「DB インスタンスのリードレプリカの操作」を参照してください。

レプリケーションを使用して、Amazon RDS の外部で動作する MySQL インスタンスからデータをインポートする方法の詳細については、「外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定」を参照してください。

mysql.rds_set_external_master

RDS for MySQL DB インスタンスを、Amazon RDS の外部で実行している MySQL インスタンスのリードレプリカとして使用するように設定します。

重要

この手順を実行するには、autocommit を有効にする必要があります。これを有効にするには、autocommit パラメータを 1 に設定します。パラメータの変更については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

注記

mysql.rds_set_external_master_with_delay ストアドプロシージャを使用して、外部出典データベースインスタンスと遅延レプリケーションを設定できます。

構文

CALL mysql.rds_set_external_master ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption );

パラメータ

host_name

出典データベースインスタンスとなる、Amazon RDS の外部で動作する MySQL インスタンスのホスト名または IP アドレス。

host_port

Amazon RDS の外部で動作する MySQL インスタンス (出典データベースインスタンス) で使用されるポート。ポート番号を変換する Secure Shell (SSH) ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって発行されるポート番号を指定します。

replication_user_name

Amazon RDS の外部で実行される MySQL インスタンスの REPLICATION CLIENT および REPLICATION SLAVE のアクセス許可を持つユーザーの ID。外部インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

replication_user_password

replication_user_name で指定されたユーザー ID のパスワード。

mysql_binary_log_file_name

レプリケーション情報を含む出典データベースインスタンス上のバイナリログの名前。

mysql_binary_log_file_location

mysql_binary_log_file_name バイナリログ内の場所。レプリケーションでは、この場所からレプリケーション情報の読み取りをスタートします。

binlog ファイルの名前と場所は、SHOW MASTER STATUS出典データベースインスタンス上で実行することによって決定できます。

ssl_encryption

レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。

注記

MASTER_SSL_VERIFY_SERVER_CERT オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

使用に関する注意事項

マスターユーザーが mysql.rds_set_external_master を実行する必要があります。このプロシージャは、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定される MySQL DB インスタンス上で実行する必要があります。

mysql.rds_set_external_master を実行する前に、Amazon RDS の外部で動作する MySQL インスタンスを出典データベースインスタンスとして必ず設定してください。Amazon RDS の外部で動作する MySQL インスタンスに接続するには、MySQL の外部インスタンスの replication_user_name および replication_user_password アクセス権限を持つレプリケーションユーザーを示す REPLICATION CLIENT および REPLICATION SLAVE の値を指定する必要があります。

MySQL の外部インスタンスを出典データベースインスタンスとして設定するには
  1. 選択した MySQL クライアントを使用して、MySQL の外部インスタンスに接続し、レプリケーションに使用されるユーザーアカウントを作成します。次に例を示します。

    MySQL 5.7

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

    MySQL 8.0

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

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

  2. MySQL の外部インスタンスで、REPLICATION CLIENTREPLICATION SLAVE の権限をレプリケーションユーザーに付与します。次の例では、ドメインの 「repl_user」ユーザーに、すべてのデータベースの REPLICATION CLIENT および REPLICATION SLAVE 権限を付与します。

    MySQL 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';

暗号化されたレプリケーションを使用するには、SSL 接続を使用するようにソースデータベースインスタンスを設定します。

注記

可能な場合は、2 つの Amazon RDS DB インスタンス間のレプリケーションを管理するために、リードレプリカを使用することをお勧めします。その場合、このプロシージャとレプリケーション関連のストアドプロシージャだけを使用することをお勧めします。これらのプラクティスにより、Amazon RDS DB インスタンス間で、より複雑なレプリケーショントポロジが有効になります。これらのストアドプロシージャは、主に Amazon RDS 外部で実行されている MySQL インスタンスのレプリケーションの有効化のために提供されています。Amazon RDS DB インスタンス間でのレプリケーションの管理の詳細については、「DB インスタンスのリードレプリカの操作」を参照してください。

mysql.rds_set_external_master を呼び出して Amazon RDS DB インスタンスをリードレプリカとして設定した後で、このリードレプリカで mysql.rds_start_replication を呼び出してレプリケーションプロセスをスタートできます。mysql.rds_reset_external_master を呼び出して、リードレプリカの設定を削除することもできます。

mysql.rds_set_external_master が呼び出されると、Amazon RDS では、時刻、ユーザー、set master アクションが mysql.rds_history テーブルと mysql.rds_replication_status テーブルに記録されます。

MySQL DB インスタンス上で実行すると、DB インスタンスが Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定されます。次に例を示します。

call mysql.rds_set_external_master( 'Externaldb.some.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.0777', 120, 0);

mysql.rds_set_external_master_with_auto_position

RDS for MySQL DB インスタンスを、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定します。このプロシージャは、遅延レプリケーション、および、グローバルトランザクション識別子 (GTID) ベースのレプリケーションも設定します。

重要

この手順を実行するには、autocommit を有効にする必要があります。これを有効にするには、autocommit パラメータを 1 に設定します。パラメータの変更については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

構文

CALL mysql.rds_set_external_master_with_auto_position ( host_name , host_port , replication_user_name , replication_user_password , ssl_encryption , delay );

パラメータ

host_name

出典データベースインスタンスとなる、Amazon RDS の外部で動作する MySQL インスタンスのホスト名または IP アドレス。

host_port

Amazon RDS の外部で動作する MySQL インスタンス (出典データベースインスタンス) で使用されるポート。ポート番号を変換する Secure Shell (SSH) ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって発行されるポート番号を指定します。

replication_user_name

Amazon RDS の外部で実行される MySQL インスタンスの REPLICATION CLIENT および REPLICATION SLAVE のアクセス許可を持つユーザーの ID。外部インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

replication_user_password

replication_user_name で指定されたユーザー ID のパスワード。

ssl_encryption

レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。

注記

MASTER_SSL_VERIFY_SERVER_CERT オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

delay

出典データベースインスタンスからのレプリケーションを遅延させる最小秒数。

このパラメータの上限は 1 日 (86400 秒) です。

使用に関する注意事項

マスターユーザーが mysql.rds_set_external_master_with_auto_position を実行する必要があります。このプロシージャは、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定される MySQL DB インスタンス上で実行する必要があります。

この手順は すべての RDS for MySQL 5.7 バージョン、RDS for MySQL 8.0.26 以降の 8.0 バージョンでサポートされています。

mysql.rds_set_external_master_with_auto_position を実行する前に、Amazon RDS の外部で動作する MySQL インスタンスを出典データベースインスタンスとして必ず設定してください。Amazon RDS の外部で実行する MySQL インスタンスに接続するには、replication_user_name および replication_user_password の値を指定する必要があります。これらの値は、MySQL の外部インスタンスで、REPLICATION CLIENT および REPLICATION SLAVE アクセス権限を持つレプリケーションユーザーを示す必要があります。

MySQL の外部インスタンスを出典データベースインスタンスとして設定するには
  1. 選択した MySQL クライアントを使用して、MySQL の外部インスタンスに接続し、レプリケーションに使用されるユーザーアカウントを作成します。次に例を示します。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. MySQL の外部インスタンスで、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。次の例では、ドメインの REPLICATION CLIENT ユーザーに、すべてのデータベースの REPLICATION SLAVE および 'repl_user' 特権を付与します。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

詳細については、「外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定」を参照してください。

注記

可能な場合は、2 つの Amazon RDS DB インスタンス間のレプリケーションを管理するために、リードレプリカを使用することをお勧めします。その場合、このプロシージャとレプリケーション関連のストアドプロシージャだけを使用することをお勧めします。これらのプラクティスにより、Amazon RDS DB インスタンス間で、より複雑なレプリケーショントポロジが有効になります。これらのストアドプロシージャは、主に Amazon RDS 外部で実行されている MySQL インスタンスのレプリケーションの有効化のために提供されています。Amazon RDS DB インスタンス間でのレプリケーションの管理の詳細については、「DB インスタンスのリードレプリカの操作」を参照してください。

mysql.rds_set_external_master_with_auto_position を呼び出す前に、必ず mysql.rds_set_external_source_gtid_purged を呼び出して、外部ソースから指定された GTID 範囲を持つ gtid_purged システム変数を設定します。

mysql.rds_set_external_master_with_auto_position を呼び出して Amazon RDS DB インスタンスをリードレプリカとして設定した後で、このリードレプリカで mysql.rds_start_replication を呼び出してレプリケーションプロセスをスタートできます。mysql.rds_reset_external_master を呼び出して、リードレプリカの設定を削除することもできます。

mysql.rds_set_external_master_with_auto_position を呼び出すと、Amazon RDS では、時刻、ユーザー、set master アクションが mysql.rds_history テーブルと mysql.rds_replication_status テーブルに記録されます。

障害復旧のために、このプロシージャを mysql.rds_start_replication_until または mysql.rds_start_replication_until_gtid ストアドプロシージャで使用できます。mysql.rds_set_external_master_with_auto_position プロシージャを実行して、遅延したリードレプリカへの変更を災害発生直前の時点までロールフォワードできます。mysql.rds_start_replication_until_gtid でのレプリケーションが停止したら、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」の手順に従ってリードレプリカを新しいプライマリ DB インスタンスに昇格させることができます。

mysql.rds_rds_start_replication_until_gtid プロシージャを使用するためには、GTID ベースのレプリケーションを有効にする必要があります。障害の原因となることが知られている特定の GTID ベースの処理をスキップするために、mysql.rds_skip_transaction_with_gtid ストアドプロシージャを使用できます。GTID ベースのレプリケーションの使用に関する詳細については、「GTID ベースレプリケーションを使用する」を参照してください。

MySQL DB インスタンス上で実行すると、DB インスタンスが Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定されます。次に例を示します。この例では、MySQL DB インスタンスでのレプリケーションの最小遅延間隔を 1 時間 (3600 秒) に設定します。Amazon RDS の外部で動作する MySQL 出典データベースインスタンスの変更は、少なくとも 1 時間は MySQL DB インスタンスのリードレプリカに適用されません。

call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 0, 3600);

mysql.rds_set_external_master_with_delay

RDS for MySQL DB インスタンスを、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定し、さらに遅延レプリケーションを設定します。

重要

この手順を実行するには、autocommit を有効にする必要があります。これを有効にするには、autocommit パラメータを 1 に設定します。パラメータの変更については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

構文

CALL mysql.rds_set_external_master_with_delay( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption , delay );

パラメータ

host_name

Amazon RDS の外部で動作する MySQL インスタンス (出典データベースインスタンス) のホスト名または IP アドレス。

host_port

Amazon RDS の外部で動作する MySQL インスタンス (出典データベースインスタンス) で使用されるポート。ポート番号を変換する SSH ポートのレプリケーションがネットワーク設定に含まれる場合、SSH によって公開されるポート番号を指定します。

replication_user_name

Amazon RDS の外部で実行される MySQL インスタンスの REPLICATION CLIENT および REPLICATION SLAVE のアクセス許可を持つユーザーの ID。外部インスタンスのレプリケーション専用のアカウントを使用することをお勧めします。

replication_user_password

replication_user_name で指定されたユーザー ID のパスワード。

mysql_binary_log_file_name

出典データベースインスタンスのバイナリログの名前には、レプリケーション情報が含まれています。

mysql_binary_log_file_location

mysql_binary_log_file_name バイナリログ内の場所。レプリケーションでは、この場所からレプリケーション情報の読み取りをスタートします。

binlog ファイルの名前と場所は、SHOW MASTER STATUS出典データベースインスタンス上で実行することによって決定できます。

ssl_encryption

レプリケーション接続で Secure Socket Layer (SSL) 暗号化を使用するかどうかを指定する値。1 は SSL 暗号化を使用することを指定し、0 は暗号化を使用しないことを指定します。デフォルトは 0 です。

注記

MASTER_SSL_VERIFY_SERVER_CERT オプションはサポートされていません。このオプションは 0 に設定されます。つまり、接続は暗号化されますが、証明書は検証されません。

delay

出典データベースインスタンスからのレプリケーションを遅延させる最小秒数。

このパラメータの上限は 1 日 (86400 秒) です。

使用に関する注意事項

マスターユーザーが mysql.rds_set_external_master_with_delay を実行する必要があります。このプロシージャは、Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定される MySQL DB インスタンス上で実行する必要があります。

mysql.rds_set_external_master_with_delay を実行する前に、Amazon RDS の外部で動作する MySQL インスタンスを出典データベースインスタンスとして必ず設定してください。Amazon RDS の外部で実行する MySQL インスタンスに接続するには、replication_user_name および replication_user_password の値を指定する必要があります。これらの値は、MySQL の外部インスタンスで、REPLICATION CLIENT および REPLICATION SLAVE アクセス権限を持つレプリケーションユーザーを示す必要があります。

MySQL の外部インスタンスを出典データベースインスタンスとして設定するには
  1. 選択した MySQL クライアントを使用して、MySQL の外部インスタンスに接続し、レプリケーションに使用されるユーザーアカウントを作成します。次に例を示します。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. MySQL の外部インスタンスで、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。次の例では、ドメインの REPLICATION CLIENT ユーザーに、すべてのデータベースの REPLICATION SLAVE および 'repl_user' 特権を付与します。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

詳細については、「外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定」を参照してください。

注記

可能な場合は、2 つの Amazon RDS DB インスタンス間のレプリケーションを管理するために、リードレプリカを使用することをお勧めします。その場合、このプロシージャとレプリケーション関連のストアドプロシージャだけを使用することをお勧めします。これらのプラクティスにより、Amazon RDS DB インスタンス間で、より複雑なレプリケーショントポロジが有効になります。これらのストアドプロシージャは、主に Amazon RDS 外部で実行されている MySQL インスタンスのレプリケーションの有効化のために提供されています。Amazon RDS DB インスタンス間でのレプリケーションの管理の詳細については、「DB インスタンスのリードレプリカの操作」を参照してください。

mysql.rds_set_external_master_with_delay を呼び出して Amazon RDS DB インスタンスをリードレプリカとして設定した後で、このリードレプリカで mysql.rds_start_replication を呼び出してレプリケーションプロセスをスタートできます。mysql.rds_reset_external_master を呼び出して、リードレプリカの設定を削除することもできます。

mysql.rds_set_external_master_with_delay を呼び出すと、Amazon RDS では、時刻、ユーザー、set master アクションが mysql.rds_history テーブルと mysql.rds_replication_status テーブルに記録されます。

障害復旧のために、このプロシージャを mysql.rds_start_replication_until または mysql.rds_start_replication_until_gtid ストアドプロシージャで使用できます。mysql.rds_set_external_master_with_delay プロシージャを実行して、遅延したリードレプリカへの変更を災害発生直前の時点までロールフォワードできます。mysql.rds_start_replication_until でのレプリケーションが停止したら、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」の手順に従ってリードレプリカを新しいプライマリ DB インスタンスに昇格させることができます。

mysql.rds_rds_start_replication_until_gtid プロシージャを使用するためには、GTID ベースのレプリケーションを有効にする必要があります。障害の原因となることが知られている特定の GTID ベースの処理をスキップするために、mysql.rds_skip_transaction_with_gtid ストアドプロシージャを使用できます。GTID ベースのレプリケーションの使用に関する詳細については、「GTID ベースレプリケーションを使用する」を参照してください。

mysql.rds_set_external_master_with_delay プロシージャは、以下のバージョンの RDS for MySQL で利用できます。

  • MySQL のバージョン 8.0 (8.0.26 以降)

  • すべての 5.7 バージョン

MySQL DB インスタンス上で実行すると、DB インスタンスが Amazon RDS の外部で動作する MySQL インスタンスのリードレプリカとして設定されます。次に例を示します。この例では、MySQL DB インスタンスでのレプリケーションの最小遅延間隔を 1 時間 (3600 秒) に設定します。Amazon RDS の外部で動作する MySQL 出典データベースインスタンスの変更は、少なくとも 1 時間は MySQL DB インスタンスのリードレプリカに適用されません。

call mysql.rds_set_external_master_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 0, 3600);

mysql.rds_set_external_source_gtid_purged

外部ソースから指定された GTID 範囲を持つ gtid_purged システム変数を設定します。自動測位を使用してレプリケーションを再開するように GTID ベースのレプリケーションを設定するには、gtid_purged 値が必要です。

重要

この手順を実行するには、autocommit を有効にする必要があります。これを有効にするには、autocommit パラメータを 1 に設定します。パラメータの変更については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

構文

CALL mysql.rds_set_external_source_gtid_purged( server_uuid , start_pos , end_pos );

パラメータ

server_uuid

GTID 範囲をインポートする外部サーバーの汎用一意識別子 (UUID)。

start_pos

設定する GTID 範囲の開始位置。

end_pos

設定する GTID 範囲の終了位置。

使用に関する注意事項

mysql.rds_set_external_source_gtid_purged の手順は、MySQL 8.0.37 以降の 8.0 バージョンでのみ使用できます。

mysql.rds_set_external_master_with_auto_position または mysql.rds_set_external_source_with_auto_position_for_channel を呼び出す前に mysql.rds_set_external_source_gtid_purged を呼び出します。

mysql.rds_set_external_source_gtid_purged を呼び出す前に、データベースのアクティブなレプリケーションチャネルをすべて停止してください。チャネルのステータスを確認するには、MySQL ステートメント SHOW REPLICA STATUS を使用します。チャネルのレプリケーションを停止するには、mysql.rds_stop_replication_for_channel を呼び出します。

指定する GTID 範囲は、既存の GTID_PURGED 値のスーパーセットである必要があります。このストアドプロシージャは、GTID_PURGED 値を設定する前に以下の値をチェックします。

  • server_uuid が有効である。

  • start_pos の値は、0 より大きく、end_pos の値より小さい。

  • end_pos の値が start_pos の値以上。

外部サーバーで設定された GTID に複数の値の範囲が含まれている場合は、異なる GTID 設定値でプロシージャを複数回呼び出すことを検討してください。

mysql.rds_set_external_source_gtid_purged を呼び出すと、Amazon RDS で、時刻、ユーザー、set gtid_purged のアクションが mysql.rds_history テーブルに記録されます。

レプリケーションに使用するバックアップに gtid_purged 値を適切に設定しないと、レプリケーションプロセス中にトランザクションが欠落したり、重複したりする可能性があります。正しい gtid_purged 値を設定するには、次の手順を実行します。

レプリカで gtid_purged 値を設定するには
  1. レプリケーションの開始点として使用するポイントインタイムまたは特定のバックアップファイルを決定します。これは、論理バックアップ (mysqldump ファイル) または物理バックアップ (Amazon RDS スナップショット) の場合があります。

  2. gtid_executed 値を決定します。この値は、サーバーでコミットされたすべての GTID のセットを表します。この値を取得するには、ソースインスタンスで次のいずれかを実行します。

    • バックアップが作成された時点で SQL ステートメント SELECT @@GLOBAL.GTID_EXECUTED; を実行します。

    • 関連するオプションがそれぞれのバックアップユーティリティに含まれている場合は、バックアップファイルから値を抽出します。詳細については、MySQL ドキュメントの「set-gtid-purged」オプションを参照してください。

  3. mysql.rds_set_external_source_gtid_purged への呼び出しに使用する gtid_purged 値を決定します。gtid_purged 値には、ソースインスタンスで実行され、レプリケーションに不要になったすべての GTID を含める必要があります。したがって、gtid_purged 値は前のステップで取得した gtid_executed 値のサブセットである必要があります。

    gtid_purged 値を決定するには、バックアップに含まれておらず、レプリケーションに不要になった GTID を特定します。そのためには、バイナリログを分析するか、mysqlbinlog などのツールを使用してバイナリログから消去された GTID を検索します。

    または、バックアップポイントまでのすべてのバイナリログを含む一貫したバックアップがある場合は、gtid_purged 値をバックアップポイントの gtid_executed 値と同じ値に設定できます。

  4. バックアップと一致する適切な gtid_purged 値を決定したら、RDS for MySQL DB インスタンスで mysql.rds_set_external_source_gtid_purged ストアドプロシージャを呼び出して値を設定します。

MySQL DB インスタンスで実行すると、次の例では、UUID 12345678-abcd-1234-efgh-123456789abc を持つ外部 MySQL サーバーからの GTID 範囲、開始位置 1、終了位置 100 が設定されます。結果の GTID 値は +12345678-abcd-1234-efgh-123456789abc:1-100 に設定されます。

CALL mysql.rds_set_external_source_gtid_purged('12345678-abcd-1234-efgh-123456789abc', 1, 100);

mysql.rds_set_master_auto_position

バイナリログファイルの位置、または、グローバルトランザクション識別子 (GTID) ベースのレプリケーションモードを設定します。

構文

CALL mysql.rds_set_master_auto_position ( auto_position_mode );

パラメータ

auto_position_mode

ファイルの位置に基づくレプリケーション、または GTID ベースのレプリケーションかどうかを示す値:

  • 0 - バイナリログファイルの位置に基づくレプリケーション方法を使用します。デフォルト: 0

  • 1 - GTID ベースのレプリケーション方法を使用します。

使用に関する注意事項

マスターユーザーが mysql.rds_set_master_auto_position を実行する必要があります。

この手順はすべての RDS for MySQL 5.7 バージョン、RDS for MySQL 8.0.26 以降の 8.0 バージョンでサポートされています。

mysql.rds_set_source_delay

出典データベースインスタンスから現在のリードレプリカへのレプリケーションを遅延させる最小秒数を設定します。出典データベースインスタンスからのレプリケーションを遅延させるリードレプリカに接続している場合に、このプロシージャを使用します。

構文

CALL mysql.rds_set_source_delay( delay );

パラメータ

delay

出典データベースインスタンスからのレプリケーションを遅延させる最小秒数。

このパラメータの上限は 1 日 (86400 秒) です。

使用に関する注意事項

マスターユーザーが mysql.rds_set_source_delay を実行する必要があります。

障害復旧のために、このプロシージャを mysql.rds_start_replication_until ストアドプロシージャ、または、mysql.rds_start_replication_until_gtid ストアドプロシージャで使用できます。mysql.rds_set_source_delay プロシージャを実行して、遅延したリードレプリカへの変更を災害発生直前の時点までロールフォワードできます。mysql.rds_start_replication_until、または mysql.rds_start_replication_until_gtid プロシージャによりレプリケーションが停止したら、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」の手順に従ってリードレプリカを新しいプライマリ DB インスタンスに昇格させることができます。

mysql.rds_rds_start_replication_until_gtid プロシージャを使用するためには、GTID ベースのレプリケーションを有効にする必要があります。障害の原因となることが知られている特定の GTID ベースの処理をスキップするために、mysql.rds_skip_transaction_with_gtid ストアドプロシージャを使用できます。GTID ベースのレプリケーションの詳細については、「GTID ベースレプリケーションを使用する」を参照してください。

mysql.rds_set_source_delay プロシージャは、以下のバージョンの RDS for MySQL で利用できます。

  • MySQL のバージョン 8.0 (8.0.26 以降)

  • すべての 5.7 バージョン

出典データベースインスタンスから現在のリードレプリカへのレプリケーションを少なくとも 1 時間 (3600 秒) 遅延させるには、次のパラメータを使用して mysql.rds_set_source_delay を呼び出すことができます。

CALL mysql.rds_set_source_delay(3600);

mysql.rds_skip_repl_error

MySQL DB リードレプリカのレプリケーションエラーをスキップして、削除します。

構文

CALL mysql.rds_skip_repl_error;

使用に関する注意事項

マスターユーザーはリードレプリカに対して mysql.rds_skip_repl_error プロシージャを実行する必要があります。この手順の詳細については、mysql.rds_skip_repl_error の手順を呼び出します。(現在のレプリケーションエラーをスキップする) を参照してください。

MySQL の SHOW REPLICA STATUS\G コマンドを実行して、エラーがあるかどうかを判断します。レプリケーションエラーが重要ではない場合、mysql.rds_skip_repl_error を実行して、エラーをスキップすることができます。複数のエラーがある場合、mysql.rds_skip_repl_error では、初期のエラーを削除してから、他のエラーが存在することを警告します。その後で SHOW REPLICA STATUS\G を使用して、次のエラーに対処するための適切な対応方法を判断することができます。戻り値の詳細については、MySQL ドキュメントの「SHOW REPLICA STATUS statement」(SHOW REPLICA STATUS ステートメント) を参照してください。

注記

MySQL の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

Amazon RDS でのレプリケーションエラーの対処方法の詳細については「MySQL リードレプリカに関する問題のトラブルシューティング」を参照してください。

レプリケーション停止エラー

mysql.rds_skip_repl_error プロシージャを呼び出すと、レプリカがダウンしているか無効であることを示すエラーメッセージが表示されることがあります。

このエラーメッセージは、リードレプリカではなくプライマリインスタンスでプロシージャを実行した場合に表示されます。このプロシージャを機能させるには、リードレプリカに対してこのプロシージャを実行する必要があります。

このエラーメッセージは、リードレプリカに対してプロシージャを実行したが、レプリケーションを正常に再開できない場合にも表示されることがあります。

多数のエラーをスキップする必要がある場合は、レプリケーションの遅延により、バイナリログ (binlog) ファイルがデフォルトの保持期間を超えて増大する場合があります。この場合、バイナリログファイルがリードレプリカで再生される前に破棄されるため、致命的なエラーが発生することがあります。この破棄によりレプリケーションが停止し、mysql.rds_skip_repl_error コマンドを呼び出してレプリケーションエラーをスキップすることができなくなります。

この問題は、出典データベースインスタンスでバイナリログファイルの保持時間を増加させることで軽減できます。バイナリログ保持時間を長くすると、レプリケーションを再開し、必要に応じて mysql.rds_skip_repl_error コマンドを使用できるようになります。

バイナリログの保持期間を設定するには、「mysql.rds_set_configuration」の手順を使用して、DB クラスターのバイナリログファイルの保持期間に合わせて、'binlog retention hours' の設定パラメータを指定します。以下の例では、バイナリログファイルの保持期間を 48 時間に設定しています。

CALL mysql.rds_set_configuration('binlog retention hours', 48);

mysql.rds_start_replication

RDS for MySQL DB インスタンスからのレプリケーションを開始します。

注記

mysql.rds_start_replication_until または mysql.rds_start_replication_until_gtid ストアドプロシージャを使用して、RDS for MySQL DB インスタンスからのレプリケーションを開始し、指定したバイナリログファイルの場所でレプリケーションを停止できます。

構文

CALL mysql.rds_start_replication;

使用に関する注意事項

マスターユーザーが mysql.rds_start_replication を実行する必要があります。

Amazon RDS の外部の MySQL インスタンスからデータをインポートするには、mysql.rds_set_external_master を呼び出してレプリケーション設定を構築した後、リードレプリカに対して mysql.rds_start_replication を呼び出して、レプリケーションプロセスを開始します。詳細については、「Amazon RDS for MySQL DB インスタンスへのバックアップの復元」を参照してください。

Amazon RDS の外部の MySQL インスタンスにデータをエクスポートするには、リードレプリカに対して mysql.rds_start_replicationmysql.rds_stop_replication を呼び出して、バイナリログの消去などのレプリケーションアクションを制御します。詳細については、「レプリケーションを使用した MySQL DB インスタンスからのデータのエクスポート」を参照してください。

リードレプリカで mysql.rds_start_replication を呼び出すことで、mysql.rds_stop_replication の呼び出しによって前に停止したレプリケーションプロセスを再開することもできます。詳細については、「DB インスタンスのリードレプリカの操作」を参照してください。

mysql.rds_start_replication_until

RDS for MySQL DB インスタンスからレプリケーションを開始し、指定したバイナリログファイルの場所でレプリケーションを停止します。

構文

CALL mysql.rds_start_replication_until ( replication_log_file , replication_stop_point );

パラメータ

replication_log_file

レプリケーション情報を含む出典データベースインスタンス上のバイナリログの名前。

replication_stop_point

replication_log_file バイナリログ内でレプリケーションが停止する場所。

使用に関する注意事項

マスターユーザーが mysql.rds_start_replication_until を実行する必要があります。

mysql.rds_start_replication_until プロシージャは、以下のバージョンの RDS for MySQL で利用できます。

  • MySQL のバージョン 8.0 (8.0.26 以降)

  • すべての 5.7 バージョン

このプロシージャは、災害対策用の遅延レプリケーションで使用できます。遅延レプリケーションを設定している場合は、このプロシージャを使用して、遅延したリードレプリカへの変更を災害発生直前の時点までロールフォワードできます。このプロシージャでのレプリケーションが停止したら、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」の手順に従ってリードレプリカを新しいプライマリ DB インスタンスに昇格させることができます。

次のストアドプロシージャを使用して遅延レプリケーションを設定できます。

replication_log_file パラメータに指定するファイル名は、出典データベースインスタンスの binlog ファイル名と一致する必要があります。

replication_stop_pointパラメータで指定した停止場所が過去の時点である場合、レプリケーションは即座に停止します。

次の例では、レプリケーションをスタートし、120 バイナリログファイルの場所 mysql-bin-changelog.000777 に達するまで変更をレプリケートします。

call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

mysql.rds_stop_replication

MySQL DB インスタンスからのレプリケーションを停止します。

構文

CALL mysql.rds_stop_replication;

使用に関する注意事項

マスターユーザーが mysql.rds_stop_replication を実行する必要があります。

Amazon RDS の外部で動作する MySQL インスタンスからデータをインポートするようにレプリケーションを設定している場合は、リードレプリカで mysql.rds_stop_replication を呼び出して、インポートが完了した後でレプリケーションプロセスを停止することができます。詳細については、「Amazon RDS for MySQL DB インスタンスへのバックアップの復元」を参照してください。

Amazon RDS の外部にある MySQL インスタンスにデータをエクスポートするようにレプリケーションを設定している場合は、リードレプリカで mysql.rds_start_replicationmysql.rds_stop_replication を呼び出して、バイナリログの消去などのレプリケーションアクションを制御できます。詳細については、「レプリケーションを使用した MySQL DB インスタンスからのデータのエクスポート」を参照してください。

mysql.rds_stop_replication を使用して、2 つ Amazon RDS DB インスタンス間のレプリケーションを停止することもできます。通常、レプリケーションの停止は、リードレプリカでの長時間のオペレーション (リードレプリカで大規模なインデックスを作成するなど) を実行するために行います。停止したレプリケーションプロセスは、リードレプリカで mysql.rds_start_replication を呼び出して再開できます。詳しくは、「DB インスタンスのリードレプリカの操作」を参照してください。