如何在另一個 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 資料傳輸費用。如需這些資料傳輸費用的詳細資訊,請參閱跨區域複寫成本。
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前