如何在另一個 AWS 帳戶中建立 Amazon RDS MySQL 跨區域複本?

上次更新日期:2022-05-24

我想要在不同的 AWS 區域和來源資料庫執行個體的帳戶建立 Amazon Relational Database Service (Amazon RDS) for MySQL 複本。該如何進行?

簡短描述

您可以針對下列使用案例,在另一個 AWS 區域和來源資料庫執行個體的帳戶建立 Amazon RDS for MySQL 複本:

  • 提升災難復原能力
  • 全域水平擴展
  • 在 AWS 區域和帳戶之間遷移

注意:沒有直接的方法可以使用 Amazon RDS 主控台或 AWS Command Line Interface (AWS CLI),在另一個 AWS 帳戶中建立跨區域複本。本文概述的步驟會在不同 AWS 帳戶或區域的兩個 RDS for MySQL 執行個體之間設定外部以二進位日誌為基礎的複寫。

解決方案

若要在另一個 AWS 帳戶中建立 Amazon RDS for MySQL 跨區域複本,請遵循以下步驟。

注意:帳戶 A 包含來源區域中的主要 RDS for MySQL 執行個體。帳戶 B 包含目標區域中的 RDS for MySQL 複本。

1.    在帳戶 A (主要 Amazon RDS for MySQL 執行個體) 中,確定二進位日誌記錄處於作用中狀態。根據預設,自動備份和二進位日誌記錄會在 RDS for MySQL 中啟用。每當啟動自動備份時,就會啟動二進位日誌記錄。

注意:如果您將備份保留期從 "0" 變更為非零值,就會發生中斷,反之亦然。

2.    使用以下命令更新您的 binlog 保留期限:

mysql>  CALL mysql.rds_set_configuration(name,value);

秘訣:選擇在複寫來源上的二進位日誌檔,在刪除之前足夠套用變更的時間期限。Amazon RDS 會在 MySQL 執行個體上保留 binlog 檔案,最多可保留 168 小時 (7 天)。如需詳細資訊,請參閱 mysql.rds_set_configuration

例如,下列語法會將 binlog 保留期間設定為 24 小時:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

3.    在帳戶 A 中的主要執行個體上建立複寫使用者,然後授予必要的權限:

mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

4.    將 (必要) 複寫用戶端複寫從屬權限授予在步驟 3 中建立的使用者:

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO  'repl_user'@'<domain_name>';

5.    在主要帳戶中建立跨區域僅供讀取複本 (帳戶 A),且已選取目標區域。

6.    在帳戶 A 中登入建立的複本執行個體,然後確認複本已與主要資料庫執行個體相同:

mysql> SHOW SLAVE STAUS\G

注意:請檢查以確定 Seconds_Behind_Master 值是「0」。當值為「0」時,複本會與主要資料庫執行個體相同。如需詳細資訊,請參閱監控僅供讀取複寫

7.    僅供讀取複本與主要資料庫執行個體相同之後,請停止在步驟 5 中建立的複本執行個體上的複寫。若要停止複寫,請使用下列語法:

mysql> call mysql.rds_stop_replication();

8.    在複本上執行 SHOW SLAVE STATUS 命令,然後記錄 Relay_Master_Log_File 和 Exec_Master_Log_Pos 的輸出值。Relay_Master_Log_File 和 Exec_Master_Log_Pos 值是您的二進位日誌座標,用來在稍後的步驟中設定外部複寫。

9.    針對帳戶 A 中的複本執行個體建立資料庫快照

(選用) 或者,您可以使用會產生邏輯備份的原生工具 (例如 mysqldump),從帳戶 A 的複本執行個體匯出資料,然後原生工具可以用來將資料匯入至帳戶 B 中相同版本的新建立 RDS for MySQL 執行個體。使用這個方法,您就不需要在兩個帳戶之間複製和共用快照或 AWS KMS key。如果您決定使用此方法,請跳至步驟 12 來設定兩個執行個體之間的網路存取和複寫。在採取此方法之前,您必須將資料匯入帳戶 B 中的 Amazon RDS for MySQL 執行個體。

10.    與帳戶 B 共用資料庫快照

注意:如果您的資料庫快照已加密,則用於加密快照的 AWS KMS key 必須與目標帳戶共用。如需詳細資訊,請參閱共用加密的快照

11.    在帳戶 B 中還原資料庫快照

注意:資料庫執行個體無法從共用加密快照還原。改為複製資料庫快照,並且從複製的版本還原資料庫執行個體。

12.    設定帳戶 A (來源帳戶) 與帳戶 B (目的地帳戶) 之間的網路存取。網路存取允許流量在來源和目的地帳戶之間流動。

13.    為帳戶 A 的主要資料庫執行個體設定傳入安全群組規則。此組態可讓流量從帳戶 B (目的地帳戶) 中新建立的 RDS for MySQL 執行個體流經公用網際網路。安全群組可保護您的 Amazon RDS for MySQL 執行個體。

對於私有複寫流量,在兩個 AWS 帳戶之間必須建立並接受 VPC 對等互連連線

14.    在帳戶 B 中的目標執行個體上設定外部複寫。使用命令內的 repl_user 作為參數。注意:CALL mysql.rds_set_external_master 命令應該由具有執行命令權限的資料庫使用者執行。

mysql> 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
  );

例如:

mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

mytestinnstance.us-east-1.rds.amazonaws.com:主要執行個體端點 3306:主要執行個體連接埠 repl_user:在步驟 3 中建立的複寫使用者名稱密碼:在步驟 3 中建立的使用者密碼 mysql-bin-changelog.000031:步驟 8 之輸出的二進位日誌檔案名稱 107:步驟 8 之輸出的二進位日誌位置

15.    在帳戶 B 中還原的執行個體上啟動複寫:

CALL mysql.rds_start_replication;

以下是範例輸出:

+-------------------------+
| Message                 |
+-------------------------+
| Slave running normally. |
+-------------------------+

16.    在帳戶 B 執行個體上執行下列命令,以檢查您的複寫狀態

mysql> show replica status \G

注意:對於 MySQL 8.0.22 版及更高版本,SHOW SLAVE STATUS 已淘汰,可以改為使用 SHOW REPLICA STATUS。如需詳細資訊,請參閱 MySQL 網站上的檢查複寫狀態

17.    刪除步驟 5 中建立的複本 (作為中繼執行個體)。此複本用來擷取二進位日誌座標,不必暫停在帳戶 A 中主要執行個體上的寫入。

跨區域複寫考量

請考量下列跨區域複寫的方法:

  • 來源資料庫執行個體可以在多個 AWS 區域擁有跨區域僅供讀取複本。如需詳細資訊,請參閱在其他 AWS 區域建立僅供讀取複本
  • 對於位在與來源執行個體不同 AWS 區域中的任何僅供讀取複本,您可以預期看到較長的延遲時間。此延遲時間來自區域資料中心之間較長的網路通道。如需複寫延遲時間的詳細資訊,請參閱監控僅供讀取複寫
  • 為跨區域複寫傳輸的資料會產生 Amazon RDS 資料傳輸費用。如需這些資料傳輸費用的詳細資訊,請參閱跨區域複寫成本

此文章是否有幫助?


您是否需要帳單或技術支援?