跳至內容

如何在另一個 AWS 帳戶中,建立 Amazon RDS for MySQL 資料庫執行個體的跨區域讀取複寫?

2 分的閱讀內容
0

我想針對不同 AWS 帳戶的來源資料庫執行個體,建立 Amazon Relational Database Service (Amazon RDS) for MySQL 跨區域複寫。

簡短描述

使用 AWS Database Migration Service (AWS DMS),或在不同 AWS 區域或帳戶的兩個 Amazon RDS for MySQL 資料庫執行個體之間,設定以 binlog 為基礎的外部複寫。您無法使用 Amazon RDS 主控台或 AWS Command Line Interface (AWS CLI),在另一個帳戶中建立跨區域讀取複寫。

**注意:**在網路通道較長的區域資料中心之間建立跨區域讀取複寫時,您可能會遇到複寫延遲。此外,也會產生跨區域複寫費用

解決方法

**注意:**在下列解決方案中,帳戶 A 包含來源區域中的主要資料庫執行個體,帳戶 B 則包含目的地區域中的複寫資料庫執行個體。

若要在另一個帳戶中建立 Amazon RDS for MySQL 跨區域讀取複寫,請完成下列步驟:

  1. 針對帳戶 A,請啟用二進位記錄
    **注意:**變更備份保留期限會導致服務中斷。此外,傳輸資料會產生額外費用

  2. 執行下列命令,更新 binlog 保留期限:

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

    **注意:**請將 value 替換成您想要變更的時數,讓設定有時間生效。Amazon RDS 將會在設定的時數後刪除二進位日誌,上限為 168 小時。如需更多資訊,請參閱 mysql.rds_set_configuration

  3. 執行下列命令,在帳戶 A 的主要資料庫執行個體上建立複寫使用者:

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

    **注意:**請將 domain_namepassword 替換成您的網域名稱和密碼。如需更多資訊,請參見 MySQL 網站上的 CREATE USER 陳述式

  4. 執行下列命令,將所需權限授與複寫使用者:

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

    **注意:**請將 domain_name 替換成您的網域名稱。如需更多資訊,請參見 MySQL 網站上的 REPLICATION CLIENTREPLICATION SLAVE

  5. 為帳戶 A 建立跨區域讀取複寫,然後選取目的地區域。

  6. 登入您為帳戶 A 建立的資料庫執行個體讀取複寫,然後執行下列命令,確認讀取複寫的狀態是否與主要資料庫執行個體相符。
    MySQL 8.0 及更早版本:

    mysql> show slave status \G

    MySQL 8.4 及更新版本:

    mysql> show replica status \G

    **注意:**當 Seconds_Behind_Master 值為零時,表示讀取複寫狀態相符。

  7. 執行以下命令,停止複寫資料庫執行個體的複寫作業:

    mysql> call mysql.rds_stop_replication();
  8. 登入複寫資料庫執行個體。

  9. 執行以下命令,記錄輸出值。
    MySQL 8.0 及更早版本:

    mysql> show slave status \G

    MySQL 8.4 及更新版本:

    mysql> show replica status \G

    **注意:**請記下 Relay_Master_Log_FileExec_Master_Log_Pos 的輸出值。這些數值是後續步驟會用到的二進位日誌座標。

  10. 為帳戶 A 的複寫資料庫執行個體建立資料庫快照

  11. (選擇性) 若要產生邏輯備份,並從帳戶 A 的複寫資料庫執行個體匯出資料,您可以使用原生工具,例如 mysqldump。如需更多資訊,請參見 MySQL 網站上的 mysqldump — A database backup program (mysqldump:資料庫備份程式)。使用 mysqldump,將資料匯入與帳戶 B 相同版本的全新資料庫執行個體。您不需要在兩個帳戶之間複製並共用快照或 AWS Key Management Service (KMS) key。
    **注意:**如果您使用 mysqldump,將資料匯入帳戶 B 的資料庫執行個體後,請繼續執行步驟 14。

  12. 與帳戶 B 共用資料庫快照 。 **注意:**如果您的資料庫快照已加密,您也必須與帳戶 B 共用 AWS KMS key。如需更多資訊,請參閱 Sharing encrypted snapshots for Amazon RDS (共用 Amazon RDS 的加密快照)。

  13. 在帳戶 B 中還原資料庫快照
    **注意:**您無法從共用的加密快照還原資料庫執行個體。您必須先複製資料庫快照,然後從複製版本還原資料庫執行個體。

  14. 設定帳戶 A 和帳戶 B 之間的網路存取權,讓流量可以在兩個帳戶之間傳輸。

  15. 在帳戶 A 的主要資料庫執行個體中,設定傳入安全群組規則,讓來自帳戶 B 資料庫執行個體的流量透過公有網際網路傳輸。
    **注意:**針對私有複寫流量,請在兩個帳戶之間建立並接受虛擬私有雲端 (VPC) 對等互連

  16. 若要在帳戶 B 的目的地資料庫執行個體上設定外部複寫,請以超級使用者身分執行以下命令。
    MySQL 8.0 及更早版本:

mysql> CALL mysql.rds_set_external_master ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');

MySQL 8.4 及更新版本:

mysql> CALL mysql.rds_set_external_source ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');

**注意:**請將 host_name 替換成主要資料庫執行個體端點,並將 host_port 替換成主要資料庫執行個體連接埠;請將 replication_user_namereplication_user_password 替換成您在步驟 3 建立的網域名稱和密碼;請將 mysql_binary_log_file_name 替換成二進位日誌檔案名稱,並將 mysql_binary_log_file_location 替換成您在步驟 9 記下的二進位日誌座標。 執行下列命令,在帳戶 B 的還原資料庫執行個體上啟動複寫:

CALL mysql.rds_start_replication;

輸出範例:

+-------------------------+  
| Message                 |  
+-------------------------+  
| Replica running normally. |  
+-------------------------+
  1. 執行下列命令,檢查帳戶 B 的複寫狀態。
    MySQL 8.0 及更早版本:
mysql> show slave status \G

MySQL 8.4 及更新版本:

mysql> show replica status \G
  1. 刪除您在步驟 5 中建立的讀取複寫。
AWS 官方已更新 1 年前