設定、啟動和停止二進位日誌 (binlog) 複寫 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定、啟動和停止二進位日誌 (binlog) 複寫

下列預存程序控制交易從外部資料庫複寫到 RDS for MySQL 中,或從 RDS for MySQL 複寫到外部資料庫的方式。

使用這些預存程序來管理使用者以 caching_sha2_password 設定的複寫進行的複寫,您必須透過指定 SOURCE_SSL=1 來設定 TLS。caching_sha2_password 是 RDS for MySQL 8.4 的預設身分驗證外掛程式。如需詳細資訊,請參閱 使用 SSL/TLS 加密

如需有關設定、使用和管理讀取複本的詳細資訊,請參閱 使用 MySQL 僅供讀取複本

mysql.rds_next_master_log (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)

將來源資料庫執行個體日誌位置變更為來源資料庫執行個體上下一個二進位日誌的開頭。只有當您在僅供讀取複本上收到複寫輸入/輸出錯誤 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.rds_next_master_log 程序。

警告

只有當複寫來源的異地同步備份資料庫執行個體在容錯移轉之後複寫失敗時,且 mysql.rds_next_master_logLast_IO_Errno 欄位報告輸入/輸出錯誤 1236,才呼叫 SHOW REPLICA STATUS

在容錯移轉事件發生之前,如果來源執行個體中的交易未寫入磁碟上的二進位日誌,則呼叫 mysql.rds_next_master_log 會導致僅供讀取複本遺失資料。您可以將來源執行個體參數 sync_binloginnodb_support_xa 設為 1,以降低此情況發生的機率,雖然這麼做會降低效能。如需詳細資訊,請參閱 對 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 欄位顯示執行個體收到輸入/輸出錯誤 1236。Master_Log_File 欄位顯示檔案名稱是 mysql-bin-changelog.012345,這表示日誌檔案索引為 12345。若要解決錯誤,您可以呼叫 mysql.rds_next_master_log 並指定下列參數:

CALL mysql.rds_next_master_log(12345);

mysql.rds_next_source_log (RDS for MySQL 主要版本 8.4 及更高版本)

將來源資料庫執行個體日誌位置變更為來源資料庫執行個體上下一個二進位日誌的開頭。只有當您在僅供讀取複本上收到複寫輸入/輸出錯誤 1236 時,才使用此程序。

語法

CALL mysql.rds_next_source_log( curr_source_log );

參數

curr_source_log

目前來源日誌檔案的索引。例如,若目前檔案的名稱是 mysql-bin-changelog.012345,則索引為 12345。若要查明目前來源日誌檔案名稱,請執行 SHOW REPLICA STATUS 命令並檢視 Source_Log_File 欄位。

使用須知

管理使用者必須執行 mysql.rds_next_source_log 程序。

警告

只有當複寫來源的異地同步備份資料庫執行個體在容錯移轉之後複寫失敗時,且 mysql.rds_next_source_logLast_IO_Errno 欄位報告輸入/輸出錯誤 1236,才呼叫 SHOW REPLICA STATUS

在容錯移轉事件發生之前,如果來源執行個體中的交易未寫入磁碟上的二進位日誌,則呼叫 mysql.rds_next_source_log 會導致僅供讀取複本遺失資料。您可以將來源執行個體參數 sync_binloginnodb_support_xa 設為 1,以降低此情況發生的機率,雖然這麼做會降低效能。如需詳細資訊,請參閱 對 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_Source: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Client requested source 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 欄位顯示執行個體收到輸入/輸出錯誤 1236。Source_Log_File 欄位顯示檔案名稱是 mysql-bin-changelog.012345,這表示日誌檔案索引為 12345。若要解決錯誤,您可以呼叫 mysql.rds_next_source_log 並指定下列參數:

CALL mysql.rds_next_source_log(12345);

mysql.rds_reset_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)

RDS for MySQL 資料庫執行個體重新設定為不再是 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

CALL mysql.rds_reset_external_master;

使用須知

主要使用者必須執行 mysql.rds_reset_external_master 程序。此程序必須在要做為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的將被移除的 MySQL 資料庫執行個體上執行。

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

如需使用複寫從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料的詳細資訊,請參閱使用外部來源執行個體設定二進位日誌檔案位置複寫

mysql.rds_reset_external_source (RDS for MySQL 主要版本 8.4 及更新版本)

RDS for MySQL 資料庫執行個體重新設定為不再是 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

CALL mysql.rds_reset_external_source;

使用須知

管理使用者必須執行 mysql.rds_reset_external_source 程序。此程序必須在要做為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的將被移除的 MySQL 資料庫執行個體上執行。

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。

如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本。如需使用複寫從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料的詳細資訊,請參閱使用外部來源執行個體設定二進位日誌檔案位置複寫

mysql.rds_set_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)

RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

注意

您可以使用 mysql.rds_set_external_master_with_delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 預存程序來設定外部來源資料庫執行個體與延遲的複寫。

語法

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

要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

host_port

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

replication_user_password

replication_user_name 中指定之使用者 ID 的密碼。

mysql_binary_log_file_name

來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

mysql_binary_log_file_location

複寫在 mysql_binary_log_file_name 二進位日誌中開始讀取複寫資訊的位置。

您可以藉由在來源資料庫執行個體上執行 SHOW MASTER STATUS 來判斷 binlog 檔案名稱和位置。

ssl_encryption

此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密,0 指定不使用加密。預設為 0。

注意

不支援 MASTER_SSL_VERIFY_SERVER_CERT 選項。此選項設定為 0,表示連線已加密,但憑證未經過驗證。

使用須知

主要使用者必須執行 mysql.rds_set_external_master 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 mysql.rds_set_external_master 之前,您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線至 Amazon RDS 外部執行的 MySQL 執行個體,您必須指定 replication_user_namereplication_user_password 值,以指出在外部 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION 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 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

    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 連線。

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 mysql.rds_set_external_master 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 來移除僅供讀取複本組態。

呼叫 mysql.rds_set_external_master 時,Amazon RDS 將時間、使用者和 set master 的動作記錄在 mysql.rds_historymysql.rds_replication_status 資料表中。

範例

在 MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

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

mysql.rds_set_external_source (RDS for MySQL 主要版本 8.4 及更新版本)

RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

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

參數

host_name

要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

host_port

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

replication_user_password

replication_user_name 中指定之使用者 ID 的密碼。

mysql_binary_log_file_name

來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

mysql_binary_log_file_location

複寫在 mysql_binary_log_file_name 二進位日誌中開始讀取複寫資訊的位置。

您可以藉由在來源資料庫執行個體上執行 SHOW MASTER STATUS 來判斷 binlog 檔案名稱和位置。

ssl_encryption

此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密,0 指定不使用加密。預設值為 0。

注意

不支援 SOURCE_SSL_VERIFY_SERVER_CERT 選項。此選項設定為 0,表示連線已加密,但憑證未經過驗證。

使用須知

管理使用者必須執行 mysql.rds_set_external_source 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 RDS for MySQL 資料庫執行個體上執行。

在執行 mysql.rds_set_external_source 之前,您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線至 Amazon RDS 外部執行的 MySQL 執行個體,您必須指定 replication_user_namereplication_user_password 值,以指出在外部 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的複寫使用者。

將外部 MySQL 執行個體設定為來源資料庫執行個體
  1. 使用您選擇的 MySQL 用戶端,連線至外部 MySQL 執行個體,並建立用於複寫的使用者帳戶。下列是 範例。

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

    指定此處所顯示提示以外的密碼,作為安全最佳實務。

  2. 在外部 MySQL 執行個體上,將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

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

若要使用加密複寫,請將來源資料庫執行個體設定為使用 SSL 連線。此外,使用 mysql.rds_import_binlog_ssl_material 程序,將憑證授權單位憑證、用戶端憑證和用戶端金鑰匯入資料庫執行個體或資料庫叢集。

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 mysql.rds_set_external_sourceRDS for MySQL 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 來移除僅供讀取複本組態。

呼叫 mysql.rds_set_external_source 時,Amazon RDS 將時間、使用者和 set master 的動作記錄在 mysql.rds_historymysql.rds_replication_status 資料表中。

範例

RDS for MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

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

mysql.rds_set_external_master_with_auto_position (RDS for MySQL 主要版本 8.0 及更低版本)

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。此程序也會依據全域交易識別符 (GTID) 設定延遲複寫和複寫。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

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

參數

host_name

要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

host_port

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION 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,表示連線已加密,但憑證未經過驗證。

延遲

從來源資料庫執行個體延遲複寫的最低秒數。

此參數的限制為一日 (86400 秒)。

使用須知

主要使用者必須執行 mysql.rds_set_external_master_with_auto_position 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

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_namereplication_user_password 的值。這些值必須指明具有 MySQL 外部執行個體 REPLICATION CLIENTREPLICATION SLAVE 許可的複寫使用者。

將外部 MySQL 執行個體設定為來源資料庫執行個體
  1. 使用您選擇的 MySQL 用戶端,連線至外部 MySQL 執行個體,並建立用於複寫的使用者帳戶。以下是範例。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. 在外部 MySQL 執行個體上,將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

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

如需更多詳細資訊,請參閱 使用外部來源執行個體設定二進位日誌檔案位置複寫

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 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 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 來移除僅供讀取複本組態。

當您呼叫 mysql.rds_set_external_master_with_auto_position,Amazon RDS 會將時間、使用者、set master 的動作記錄在 mysql.rds_historymysql.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 程序停止複寫後,您可使用 提升僅供讀取複本為獨立的資料庫執行個體 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 mysql.rds_rds_start_replication_until_gtid 程序,需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易,可以使用 mysql.rds_skip_transaction_with_gtid 預存程序。如需有關依據 GTID 複寫的詳細資訊,請參閱使用 GTID 式複寫

範例

在 MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體,其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

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

mysql.rds_set_external_source_with_auto_position (RDS for MySQL 主要版本 8.4 及更新版本)

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。此程序也會依據全域交易識別符 (GTID) 設定延遲複寫和複寫。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

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

參數

host_name

要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

host_port

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

replication_user_password

replication_user_name 中指定之使用者 ID 的密碼。

ssl_encryption

此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密,0 指定不使用加密。預設為 0。

注意

不支援 SOURCE_SSL_VERIFY_SERVER_CERT 選項。此選項設定為 0,表示連線已加密,但憑證未經過驗證。

延遲

從來源資料庫執行個體延遲複寫的最低秒數。

此參數的限制為一日 (86400 秒)。

使用須知

管理使用者必須執行 mysql.rds_set_external_source_with_auto_position 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 mysql.rds_set_external_source_with_auto_position 之前,您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體,您必須指定 replication_user_namereplication_user_password 的值。這些值必須指明具有 MySQL 外部執行個體 REPLICATION CLIENTREPLICATION SLAVE 許可的複寫使用者。

將外部 MySQL 執行個體設定為來源資料庫執行個體
  1. 使用您選擇的 MySQL 用戶端,連線至外部 MySQL 執行個體,並建立用於複寫的使用者帳戶。以下是範例。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. 在外部 MySQL 執行個體上,將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

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

如需更多詳細資訊,請參閱 使用外部來源執行個體設定二進位日誌檔案位置複寫

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 mysql.rds_set_external_source_with_auto_position 之前,請務必呼叫 mysql.rds_set_external_source_gtid_purged,以從外部來源設定具有指定 GTID 範圍的 gtid_purged 系統變數。

呼叫 mysql.rds_set_external_source_with_auto_position 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 來移除僅供讀取複本組態。

當您呼叫 mysql.rds_set_external_source_with_auto_position,Amazon RDS 會將時間、使用者、set master 的動作記錄在 mysql.rds_historymysql.rds_replication_status 資料表中。

進行災難復原時,您可以透過 mysql.rds_start_replication_until mysql.rds_start_replication_until_gtid 預存程序來使用此程序。若要變更延遲的僅供讀取複本,並向前捲動到災難發生前的時間點,可以執行 mysql.rds_set_external_source_with_auto_position 程序。在 mysql.rds_start_replication_until_gtid 程序停止複寫後,您可使用 提升僅供讀取複本為獨立的資料庫執行個體 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 mysql.rds_rds_start_replication_until_gtid 程序,需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易,可以使用 mysql.rds_skip_transaction_with_gtid 預存程序。如需有關依據 GTID 複寫的詳細資訊,請參閱使用 GTID 式複寫

範例

在 MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體,其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

call mysql.rds_set_external_source_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 1, 3600);

mysql.rds_set_external_master_with_delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本,並設定延遲複寫。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

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

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的 SSH 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

replication_user_password

replication_user_name 中指定之使用者 ID 的密碼。

mysql_binary_log_file_name

來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

mysql_binary_log_file_location

mysql_binary_log_file_name 二進位日誌中的複寫將開始讀取複寫資訊的位置。

您可以藉由在來源資料庫執行個體上執行 SHOW MASTER STATUS 來判斷 binlog 檔案名稱和位置。

ssl_encryption

此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密,0 指定不使用加密。預設為 0。

注意

不支援 MASTER_SSL_VERIFY_SERVER_CERT 選項。此選項設定為 0,表示連線已加密,但憑證未經過驗證。

延遲

從來源資料庫執行個體延遲複寫的最低秒數。

此參數的限制為一日 (86400 秒)。

使用須知

主要使用者必須執行 mysql.rds_set_external_master_with_delay 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 mysql.rds_set_external_master_with_delay 之前,您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體,您必須指定 replication_user_namereplication_user_password 的值。這些值必須指明具有 MySQL 外部執行個體 REPLICATION CLIENTREPLICATION SLAVE 許可的複寫使用者。

將外部 MySQL 執行個體設定為來源資料庫執行個體
  1. 使用您選擇的 MySQL 用戶端,連線至外部 MySQL 執行個體,並建立用於複寫的使用者帳戶。以下是範例。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. 在外部 MySQL 執行個體上,將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

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

如需更多詳細資訊,請參閱 使用外部來源執行個體設定二進位日誌檔案位置複寫

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 mysql.rds_set_external_master_with_delay 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 來移除僅供讀取複本組態。

當您呼叫 mysql.rds_set_external_master_with_delay,Amazon RDS 會將時間、使用者、set master 的動作記錄在 mysql.rds_historymysql.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 程序停止複寫後,您可使用 提升僅供讀取複本為獨立的資料庫執行個體 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 mysql.rds_rds_start_replication_until_gtid 程序,需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易,可以使用 mysql.rds_skip_transaction_with_gtid 預存程序。如需有關依據 GTID 複寫的詳細資訊,請參閱使用 GTID 式複寫

以下的 RDS for MySQL 版本中可使用 mysql.rds_set_external_master_with_delay 程序:

  • MySQL 8.0.26 和更新的 8.0 版

  • 所有 5.7 版

範例

在 MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體,其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

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

mysql.rds_set_external_source_with_delay (RDS for MySQL 主要版本 8.4 及更新版本)

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本,並設定延遲複寫。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

CALL mysql.rds_set_external_source_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

要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的 SSH 連線埠複寫,請指定 SSH 所公開的連線埠號碼。

replication_user_name

在 Amazon RDS 外部執行的 MySQL 執行個體上具有 REPLICATION CLIENTREPLICATION SLAVE 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

replication_user_password

replication_user_name 中指定之使用者 ID 的密碼。

mysql_binary_log_file_name

來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

mysql_binary_log_file_location

mysql_binary_log_file_name 二進位日誌中的複寫將開始讀取複寫資訊的位置。

您可以藉由在來源資料庫執行個體上執行 SHOW MASTER STATUS 來判斷 binlog 檔案名稱和位置。

ssl_encryption

此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密,0 指定不使用加密。預設為 0。

注意

不支援 SOURCE_SSL_VERIFY_SERVER_CERT 選項。此選項設定為 0,表示連線已加密,但憑證未經過驗證。

延遲

從來源資料庫執行個體延遲複寫的最低秒數。

此參數的限制為一日 (86400 秒)。

使用須知

管理使用者必須執行 mysql.rds_set_external_source_with_delay 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 mysql.rds_set_external_source_with_delay 之前,您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體,您必須指定 replication_user_namereplication_user_password 的值。這些值必須指明具有 MySQL 外部執行個體 REPLICATION CLIENTREPLICATION SLAVE 許可的複寫使用者。

將外部 MySQL 執行個體設定為來源資料庫執行個體
  1. 使用您選擇的 MySQL 用戶端,連線至外部 MySQL 執行個體,並建立用於複寫的使用者帳戶。以下是範例。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. 在外部 MySQL 執行個體上,將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。下列範例將所有資料庫上的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的 'repl_user' 使用者。

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

如需更多詳細資訊,請參閱 使用外部來源執行個體設定二進位日誌檔案位置複寫

注意

如果可能,建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時,建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊,請參閱使用資料庫執行個體僅供讀取複本

呼叫 mysql.rds_set_external_source_with_delay 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後,您可以在僅供讀取複本上呼叫 mysql.rds_start_replication 來啟動複寫程序。您可以呼叫 mysql.rds_reset_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 來移除僅供讀取複本組態。

當您呼叫 mysql.rds_set_external_source_with_delay,Amazon RDS 會將時間、使用者、set master 的動作記錄在 mysql.rds_historymysql.rds_replication_status 資料表中。

進行災難復原時,您可以透過 mysql.rds_start_replication_until mysql.rds_start_replication_until_gtid 預存程序來使用此程序。若要變更延遲的僅供讀取複本,並向前捲動到災難發生前的時間點,可以執行 mysql.rds_set_external_source_with_delay 程序。在 mysql.rds_start_replication_until 程序停止複寫後,您可使用 提升僅供讀取複本為獨立的資料庫執行個體 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 mysql.rds_rds_start_replication_until_gtid 程序,需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易,可以使用 mysql.rds_skip_transaction_with_gtid 預存程序。如需有關依據 GTID 複寫的詳細資訊,請參閱使用 GTID 式複寫

範例

在 MySQL 資料庫執行個體上執行時,下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體,其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

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

mysql.rds_set_external_source_gtid_purged

從外部來源設定具有指定 GTID 範圍的 gtid_purged 系統變數。設定 GTID 型複寫以使用自動定位繼續複寫時需要 gtid_purged 值。

重要

若要執行此程序,必須啟用 autocommit。若要啟用它,請將 autocommit 參數設定為 1。如需修改參數的相關資訊,請參閱修改 Amazon RDS 中的資料庫參數群組中的參數

語法

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 (RDS for MySQL 主要版本 8.0 及更低版本)mysql.rds_set_external_source_with_auto_position (RDS for MySQL 主要版本 8.4 及更新版本)mysql.rds_set_external_source_with_auto_position_for_channel 之前,請先呼叫 mysql.rds_set_external_source_gtid_purged

在呼叫 mysql.rds_set_external_source_gtid_purged 之前,請務必停止資料庫的所有作用中複寫通道。若要檢查通道的狀態,請使用 SHOW REPLICA STATUS MySQL 陳述式。若要停止通道上的複寫,請呼叫 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_purgedgtid_purged 值。gtid_purged 值應該包含已在來源執行個體上執行且不再需要複寫的所有 GTID。因此,gtid_purged 值應該是您在上一個步驟中擷取之 gtid_executed 值的子集。

    若要判斷 gtid_purged 值,請識別未包含在備份中且不再需要複寫的 GTID。您可以透過分析二進制日誌或使用 mysqlbinlog 等工具,尋找已從二進制日誌中清除的 GTID,藉以執行此操作。

    或者,如果您有一個一致的備份,其中包含備份點之前的所有二進制日誌,您可以將 gtid_purged 值設定為與備份點的 gtid_executed 值相同。

  4. 在您確定與備份一致的適當 gtid_purged 值後,請呼叫 RDS for MySQL 資料庫執行個體上的 mysql.rds_set_external_source_gtid_purged 預存程序來設定該值。

範例

在 MySQL 資料庫執行個體上執行時,下列範例會設定來自外部 MySQL 伺服器的 GTID 範圍,其 UUID 為 12345678-abcd-1234-efgh-123456789abc,起始位置為 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 (RDS for MySQL 主要版本 8.0 及更低版本)

將複寫模式設為依據二進制日誌檔案位置或全域交易識別符 (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_auto_position (RDS for MySQL 主要版本 8.4 及更新版本)

將複寫模式設為依據二進制日誌檔案位置或全域交易識別符 (GTID)。

語法

CALL mysql.rds_set_source_auto_position (auto_position_mode);

參數

auto_position_mode

此值指示要使用日誌檔案位置複寫或是 GTID 複寫:

  • 0 – 使用依據二進制日誌檔案位置的複寫模式。預設值為 0

  • 1 – 使用依據 GTID 的複寫方法。

使用須知

管理使用者必須執行 mysql.rds_set_source_auto_position 程序。

mysql.rds_set_source_delay

設定最低秒數,以延遲來源資料庫執行個體到目前僅供讀取複本的複寫。當您連線到僅供讀取複本時,請使用此程序來延遲從來源資料庫執行個體的複寫。

語法

CALL mysql.rds_set_source_delay( delay );

參數

延遲

從來源資料庫執行個體延遲複寫的最低秒數。

此參數的限制為一日 (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_untilmysql.rds_start_replication_until_gtid 程序停止複寫後,您可使用提升僅供讀取複本為獨立的資料庫執行個體中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 mysql.rds_rds_start_replication_until_gtid 程序,需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易,可以使用 mysql.rds_skip_transaction_with_gtid 預存程序。如需依據 GTID 複寫的詳細資訊,請參閱使用 GTID 式複寫

以下的 RDS for MySQL 版本中可使用 mysql.rds_set_source_delay 程序:

  • 所有 RDS for MySQL 8.4 版本

  • MySQL 8.0.26 和更新的 8.0 版

  • 所有 5.7 版

範例

若要延遲來源資料庫執行個體到目前僅供讀取複本的複寫至少一小時 (3,600 秒),您可透過下列參數呼叫 mysql.rds_set_source_delay

CALL mysql.rds_set_source_delay(3600);

mysql.rds_skip_repl_error

略過和刪除 MySQL 資料庫僅供讀取複本上的複寫錯誤。

語法

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 陳述式

如需有關解決 Amazon RDS 複寫錯誤的詳細資訊,請參閱 對 MySQL 僅供讀取複本問題進行故障診斷

複寫已停止錯誤

當您呼叫 mysql.rds_skip_repl_error 程序時,可能會收到錯誤訊息,指出複本已關閉或停用。

如果您在主要執行個體而非僅供讀取複本上執行程序,此錯誤訊息就會出現。您必須在僅供讀取複本上執行此程序,程序才能運作。

如果您在僅供讀取複本上執行程序,但複寫無法成功重新啟動,此錯誤訊息也可能出現。

如果您需要略過大量錯誤,複寫延遲可能增加至超出二進位日誌(binlog) 檔案的預設保留期間。在此情況下,由於在清除 binlog 檔案之前已在僅供讀取複本上重播該檔案,您可能會遇到嚴重錯誤。此清除動作會導致複寫停止,而您將無法再呼叫 mysql.rds_skip_repl_error 命令來略過複寫錯誤。

透過增加 binlog 檔案在來源資料庫執行個體上保留的小時數,即可以減輕此問題。在延長二進位記錄檔保留時間之後,您可以重新啟動複寫,並視需要呼叫 mysql.rds_skip_repl_error 命令。

若要設定 binlog 保留時間,請使用 mysql.rds_set_configuration 程序,並指定 'binlog retention hours'組態參數加上資料庫叢集上保留 binlog 檔案的時數。下列範例會將 binlog 檔案的保留期間設定為 48 小時。

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

mysql.rds_start_replication

RDS for MySQL 資料庫執行個體起始複寫。

注意

您可使用 mysql.rds_start_replication_until mysql.rds_start_replication_until_gtid 預存程序從 RDS for MySQL 資料庫執行個體來啟動複寫,並從特定的二進位日誌檔案位置停止複寫。

語法

CALL mysql.rds_start_replication;

使用須知

主要使用者必須執行 mysql.rds_start_replication 程序。

如果要從 Amazon RDS 外部的 MySQL 執行個體匯入資料,請呼叫 mysql.rds_set_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)mysql.rds_set_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 來建置複寫組態,再呼叫僅供讀取複本上的 mysql.rds_start_replication 來啟動複寫程序。如需詳細資訊,請參閱將備份還原至 Amazon RDS for MySQL 資料庫執行個體

若要將資料匯出至 Amazon RDS 外部的 MySQL 執行個體,請在僅供讀取複本上呼叫 mysql.rds_start_replicationmysql.rds_stop_replication 來控制某些複寫動作,例如清除二進位日誌。如需詳細資訊,請參閱使用複寫從 MySQL 資料庫執行個體匯出資料

您也可以對僅供讀取複本呼叫 mysql.rds_start_replication,以重新啟動您先前呼叫 mysql.rds_stop_replication 所停止的任何複寫程序。如需詳細資訊,請參閱使用資料庫執行個體僅供讀取複本

mysql.rds_start_replication_until

RDS for MySQL 資料庫執行個體啟動複寫,並從特定的二進位日誌檔案位置停止複寫。

語法

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 程序。

以下的 RDS for MySQL 版本中可使用 mysql.rds_start_replication_until 程序:

  • 所有 RDS for MySQL 8.4 版本

  • MySQL 8.0.26 和更新的 8.0 版

  • 所有 5.7 版

您可以透過延遲複寫來使用此程序進行災難復原。若您已延遲複寫設定,您可使用此程序變更延遲的僅供讀取複本,並向前捲動到災難發生前的時間點。在此程序停止複寫後,您可使用 提升僅供讀取複本為獨立的資料庫執行個體 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

您可使用以下預存程序來設定延遲複寫:

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 資料庫執行個體停止複寫。

語法

CALL mysql.rds_stop_replication;

使用須知

主要使用者必須執行 mysql.rds_stop_replication 程序。

如果您要將複寫設定為從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料,在匯入完成之後,請在僅供讀取複本上呼叫 mysql.rds_stop_replication 來停止複寫程序。如需詳細資訊,請參閱將備份還原至 Amazon RDS for MySQL 資料庫執行個體

如果您要設定複寫將資料匯出至 Amazon RDS 外部的 MySQL 執行個體,請在僅供讀取複本上呼叫 mysql.rds_start_replicationmysql.rds_stop_replication 來控制某些複寫動作,例如清除二進位日誌。如需詳細資訊,請參閱使用複寫從 MySQL 資料庫執行個體匯出資料

您也可以使用 mysql.rds_stop_replication,以停止兩個 Amazon RDS 資料庫執行個體之間的複寫。您停止複寫通常是為了在僅供讀取複本上執行長時間的操作,例如在僅供讀取複本上建立大型索引。您可以在僅供讀取複本上呼叫 mysql.rds_start_replication,以重新啟動您已停止的任何複寫程序。如需詳細資訊,請參閱使用資料庫執行個體僅供讀取複本