Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何在另一個 AWS 帳戶中建立 Amazon RDS MySQL 跨區域複本?
我想要在不同的 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 STATUS\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 資料傳輸費用。如需這些資料傳輸費用的詳細資訊,請參閱跨區域複寫成本。
相關資訊
相關內容
- 已提問 3 年前
