View a markdown version of this page

使用 Amazon Aurora MySQL 設定延遲複寫 - Amazon Aurora

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

使用 Amazon Aurora MySQL 設定延遲複寫

您可以使用延遲複寫做為 Aurora MySQL 災難復原的策略。利用延遲複寫功能來指定最短時間 (以秒為單位),即可延遲來源到僅供讀取複本的複寫作業。在發生損毀之時 (例如不小心刪除資料表),若要快速完成事後復原作業,則請執行下列步驟:

  1. 在來源傳送造成災難的變更之前,停止複寫至僅供讀取複本。使用 mysql.rds_stop_replication 預存程序來停止複寫作業。

  2. 啟動複寫作業並指定日誌檔案位置,則當系統複寫到該位置時,即會自動停止作業。透過 mysql.rds_start_replication_until(Aurora MySQL 第 3 版) 預存程式,藉此在發生損毀前指定日誌檔案位置。

  3. 使用 中的指示,將僅供讀取複本提升為新的來源資料庫叢集將僅供讀取複本提升為 Aurora MySQL 的資料庫叢集

注意

Aurora MySQL 支援 8.4.8 版和更新版本的延遲複寫。

延遲複寫的使用案例

Aurora MySQL 上的延遲複寫適用於二進位日誌式複寫。這包括從 Aurora MySQL 寫入器資料庫叢集複寫到 binlog 複本、從外部 MySQL 來源複寫到 Aurora MySQL 資料庫叢集,或跨多來源複寫通道。它不適用於單一資料庫叢集內的 Aurora 複本,因為這些複本會從共用叢集儲存讀取,而不是從二進位日誌讀取。常見的使用案例包括下列項目:

  • 從運算子錯誤進行災難復原 – 維護 Binlog 複本,該複本會以設定的間隔延遲來源。如果破壞性陳述式意外執行 (例如捨棄資料表),請在來源套用變更之前停止延遲複本上的複寫。然後使用 mysql.rds_start_replication_until(Aurora MySQL 第 3 版)或 向前滾動至事件發生前的 mysql.rds_start_replication_until_gtid(Aurora MySQL 第 3 版)。最後,提升複本。這種方法提供的復原路徑比point-in-time復原更快,這需要損毀復原和二進位日誌重播。

  • 防止邏輯資料損毀 – 延遲複本也會防止應用程式部署或遷移故障而逐漸損毀資料。由於複本會保留延遲時間長度的預先損毀狀態,因此您可以在套用故障交易之前進行復原。

  • 主要版本和藍/綠升級 – 在升級期間保留延遲的 Binlog 複本,或保留藍/綠部署做為安全網路,以便在升級發生問題時回到已知良好的狀態。

  • 從外部來源變更資料擷取 (CDC) – 當您從外部 MySQL 來源擷取變更至 Aurora MySQL 資料庫叢集時,刻意延遲會在將變更套用到下游之前為您提供受控緩衝區。

  • 沒有還原的歷史檢查 – 查詢延遲複本,以查看您稍早資料的外觀。這有助於偵錯、稽核或調查變更的內容,而無需佈建複製或執行point-in-time還原。

  • 在複寫延遲下測試應用程式行為 – 使用人工膨脹的延遲來驗證應用程式在複本延遲時的行為,並針對延遲敏感的條件執行迴歸測試,而無需產生繁衍延遲的繁重負載。

設定具有延遲的外部複寫

若要設定具有延遲複寫的外部來源,請使用 mysql.rds_set_external_source_with_delay (版本Aurora MySQL 版本 8.4.8 和更新版本)預存程序。如需所有複寫預存程序的詳細資訊,請參閱 設定、啟動和停止二進位日誌 (binlog) 複寫

範例 (預設頻道):

CALL mysql.rds_set_external_source_with_delay( 'source-host.example.com', 3306, 'repl_user', 'repl_password', 'mysql-bin-changelog.000001', 120, 0, 3600);

範例 (特定頻道):

CALL mysql.rds_set_external_source_with_delay_for_channel( 'source-host.example.com', 3306, 'repl_user', 'repl_password', 'mysql-bin-changelog.000001', 120, 0, 3600, 'channel_1');

參數:

host_name

外部來源的主機名稱或 IP 地址。

host_port

外部來源的連接埠號碼。

replication_user_name

外部來源上的複寫使用者。

replication_user_password

複寫使用者的密碼。

mysql_binary_log_file_name

外部來源上二進位日誌檔案的名稱。

mysql_binary_log_file_location

二進位日誌檔案中開始複寫的位置。

ssl_encryption

將此參數設定為 1 以啟用複寫連線的 SSL 加密,或設定為 0 以停用 SSL 加密。

延遲

最小延遲秒數 (0–259,200)。

頻道

(僅適用於_通道變體) 多來源複寫的通道名稱。

限制條件

  • Aurora MySQL 最多支援 15 個複寫通道。

  • 每個頻道都必須從不同的來源複寫 (主機:連接埠組合)。

  • 延遲必須介於 0 到 259,200 秒 (72 小時) 之間。

  • 在修改頻道組態之前停止複寫。

修改現有僅供讀取複本的延遲複寫

若要修改現有僅供讀取複本的延遲複寫,請執行 mysql.rds_set_source_delay (版本Aurora MySQL 8.4.8 及更高版本) 預存程序。如需所有複寫預存程序的詳細資訊,請參閱 設定、啟動和停止二進位日誌 (binlog) 複寫

若要修改現有僅供讀取複本的延遲複寫:

  1. 使用 MySQL 用戶端,以管理員使用者身分連線至僅供讀取複本。

  2. 使用 mysql.rds_stop_replication 預存程序來停止複寫作業。

  3. 執行 mysql.rds_set_source_delay (版本Aurora MySQL 8.4.8 及更高版本) 預存程序。

  4. 使用 mysql.rds_start_replication 預存程序來啟動複寫作業。

範例 (預設頻道):

CALL mysql.rds_set_source_delay(3600);

範例 (特定頻道):

CALL mysql.rds_set_source_delay_for_channel(3600, 'channel_1');

這會指定對僅供讀取複本的複寫會延遲至少一小時 (3,600 秒)。延遲值必須介於 0 到 259,200 秒 (72 小時) 之間。

注意

在設定延遲之前停止複寫。如果複寫正在執行,您會收到錯誤,要求您先呼叫 mysql.rds_stop_replication(或mysql.rds_stop_replication_for_channel特定頻道)。

設定位置以停止複寫至僅供讀取複本

停止僅供讀取複本的複寫作業後,您可以使用 mysql.rds_start_replication_until(Aurora MySQL 第 3 版) 預存程序來啟動複寫,然後在特定的二進位日誌檔案位置停止複寫。

若要開始複寫並在特定位置停止:

  1. 使用 MySQL 用戶端,以管理員使用者身分連線至僅供讀取複本。

  2. 執行 mysql.rds_start_replication_until(Aurora MySQL 第 3 版) 預存程序。

範例

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

這會啟動複寫並複寫變更,直到達到mysql-bin-changelog.000777二進位日誌檔案中的位置 120。在災難復原案例中,假設位置 120 就在災難之前。

當 Aurora MySQL 到達停止點時,複寫會自動停止。Aurora MySQL 會產生下列事件:Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure

如果您使用 GTID 式複寫,請改用 mysql.rds_start_replication_until_gtid(Aurora MySQL 第 3 版) 預存程序。

提升僅供讀取複本

複寫停止後,在災難復原案例中,您可以將僅供讀取複本提升為新的來源資料庫叢集。如需提升僅供讀取複本的相關資訊,請參閱 將僅供讀取複本提升為 Aurora MySQL 的資料庫叢集

相關主題