使用複寫從 MySQL 資料庫執行個體匯出資料 - Amazon Relational Database Service

使用複寫從 MySQL 資料庫執行個體匯出資料

如要從 RDS for MySQL 資料庫執行個體,將資料匯出至在 Amazon RDS 外部執行的 MySQL 執行個體,您可使用複寫。在此案例中,MySQL 資料庫執行個體是來源 MySQL 資料庫執行個體,而在 Amazon RDS 外部執行的 MySQL 執行個體則是外部 MySQL 資料庫

外部 MySQL 資料庫可以在資料中心以內部部署方式執行,或在 Amazon EC2 執行個體上執行。外部 MySQL 資料庫必須執行與來源 MySQL 資料庫執行個體相同的版本,或更新版本。

只有在從來源 MySQL 資料庫執行個體匯出資料庫期間,才支援複寫到外部 MySQL 資料庫。在匯出資料後且應用程式可以開始存取外部 MySQL 執行個體時,就應該終止複寫。

下列清單顯示要採取的步驟。後續幾節會詳細討論各步驟。

  1. 準備外部 MySQL 資料庫執行個體。

  2. 準備用於複寫的來源 MySQL 資料庫執行個體。

  3. 使用 mysqldump 公用程式將資料庫從來源 MySQL 資料庫執行個體轉移到外部 MySQL 資料庫。

  4. 開始複寫到外部 MySQL 資料庫。

  5. 匯出完成之後,請停止複寫。

準備外部 MySQL 資料庫

請執行下列步驟來準備外部 MySQL 資料庫。

準備外部 MySQL 資料庫
  1. 安裝外部 MySQL 資料庫。

  2. 以主要使用者身分連線至外部 MySQL 資料庫。然後建立支援存取資料庫的管理員、應用程式和服務所需的使用者。

  3. 遵循 MySQL 文件中的指示,準備外部 MySQL 資料庫作為複本。如需詳細資訊,請參閱 MySQL 文件中的設定複本組態

  4. 設定輸出規則,讓外部 MySQL 資料庫在匯出期間充當僅供讀取複本。輸出規則可讓外部 MySQL 資料庫在複寫期間連線到來源 MySQL 資料庫執行個體。指定輸出規則,以允許經由傳輸控制通訊協定 (TCP) 連接至來源 MySQL 資料庫執行個體的連接埠和 IP 位址。

    為您的環境指定適當的輸出規則:

    • 如果外部 MySQL 資料庫正在以 Amazon VPC 服務為基礎之 Virtual Private Cloud (VPC) 的 Amazon EC2 執行個體中執行,請在 VPC 安全群組中指定輸出規則。如需詳細資訊,請參閱 使用安全群組控制存取

    • 如果外部 MySQL 資料庫以內部部署方式安裝,請在防火牆中指定輸出規則。

  5. 如果外部 MySQL 資料庫在 VPC 中執行,除了安全群組輸出規則之外,另請為 VPC 存取控制清單 (ACL) 規則設定規則:

    • 設定 ACL 輸入規則,以允許 TCP 流量從來源 MySQL 資料庫執行個體的 IP 位址流向連接埠 1024–65535。

    • 設定 ACL 輸出規則,以允許傳出 TCP 流量流向來源 MySQL 資料庫執行個體的連接埠和 IP 位址。

    如需 Amazon VPC 網路 ACL 的詳細資訊,請參閱《Amazon VPC 使用者指南》中的網路 ACL

  6. (選用) 將 max_allowed_packet 參數設定為最大值,以避免複寫錯誤。我們建議您使用此設定。

準備來源 MySQL 資料庫執行個體

執行下列步驟,準備來源 MySQL 資料庫執行個體做為複寫來源。

準備來源 MySQL 資料庫執行個體
  1. 確定用戶端電腦有足夠磁碟空間在設定複寫時儲存二進位日誌。

  2. 連線至來源 MySQL 資料庫執行個體,並依照 MySQL 文件中建立複寫的使用者的指示建立複寫帳戶。

  3. 在執行來源 MySQL 資料庫執行個體的系統上設定輸入規則,以允許外部 MySQL 資料庫在複寫期間連線。指定輸入規則,以允許從外部 MySQL 資料庫的 IP 地址,經由 TCP 連接至來源 MySQL 資料庫執行個體所使用的連接埠。

  4. 指定輸出規則:

    • 如果來源 MySQL 資料庫執行個體在 VPC 中執行,請在 VPC 安全群組中指定輸入規則。如需詳細資訊,請參閱 使用安全群組控制存取

  5. 如果來源 MySQL 資料庫執行個體在 VPC 中執行,則除了安全群組輸入規則,還需要設定 VPC ACL 規則。

    • 設定 ACL 輸入規則,以允許從外部 MySQL 資料庫的 IP 位址,經由 TCP 連接至 Amazon RDS 執行個體所使用的連接埠。

    • 設定 ACL 輸出規則,以允許從連接埠 1024–65535 經由 TCP 連接至外部 MySQL 資料庫的 IP 位址。

    如需 Amazon VPC 網路 ACL 的詳細資訊,請參閱《Amazon VPC 使用者指南》中的網路 ACL

  6. 確定備份保留期的設定夠長,以避免在匯出期間清除二進位日誌。如果在匯出完成之前清除任何日誌,則您必須重新開始複寫。如需設定備份保留期的詳細資訊,請參閱 備份簡介

  7. 使用 mysql.rds_set_configuration 預存程序來設定夠長的二進位日誌保留期,以避免在匯出期間清除二進位日誌。如需詳細資訊,請參閱 存取 MySQL 二進位日誌

  8. 請從來源 MySQL 資料庫執行個體建立 Amazon RDS 僅供讀取複本,以進一步確保不會清除來源 MySQL 資料庫執行個體的二進位日誌。如需詳細資訊,請參閱 建立僅供讀取複本

  9. 建立 Amazon RDS 僅供讀取複本之後,請呼叫 mysql.rds_stop_replication 預存程序來停止複寫程序。來源 MySQL 資料庫執行個體不再清除其二進位日誌檔案,因此可用於複寫程序。

  10. (選用) 將 max_allowed_packet 參數和 slave_max_allowed_packet 參數同時設定為最大值,以避免複寫錯誤。這兩個參數的最大值為 1 GB。我們建議兩個參數都使用此設定。如需有關設定參數的詳細資訊,請參閱 修改 Amazon RDS 中的資料庫參數群組中的參數

複製資料庫

執行下列步驟來複製資料庫。

複製資料庫
  1. 連線到來源 MySQL 資料庫執行個體的 RDS 僅供讀取複本,然後執行 MySQL SHOW REPLICA STATUS\G 陳述式。請注意下列項目的值:

    • Master_Host

    • Master_Port

    • Master_Log_File

    • Exec_Master_Log_Pos

    注意

    MySQL 以前的版本使用 SHOW SLAVE STATUS 而不是 SHOW REPLICA STATUS。如果您使用的 MySQL 是 8.0.23 之前的版本,請使用 SHOW SLAVE STATUS

  2. 使用 mysqldump 公用程式建立快照,以將資料從 Amazon RDS 複製到本機用戶端電腦。確定用戶端電腦有足夠空間,可保留待複寫資料庫的 mysqldump 檔案。如果資料庫非常龐大,此程序可能需要數小時的時間。依照 MySQL 文件中的使用 mysqldump 建立資料快照的指示操作。

    下列範例會在用戶端上執行 mysqldump,並將傾印寫入檔案。

    針對 Linux、macOS 或 Unix:

    mysqldump -h source_MySQL_DB_instance_endpoint \ -u user \ -ppassword \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 > path/rds-dump.sql

    針對 Windows:

    mysqldump -h source_MySQL_DB_instance_endpoint ^ -u user ^ -ppassword ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --databases database database2 > path\rds-dump.sql

    您可以將備份檔案載入至外部 MySQL 資料庫中。如需詳細資訊,請參閱 MySQL 文件中的重新載入 SQL 格式備份。您可以執行另一個公用程式,將資料載入至外部 MySQL 資料庫中。

完成匯出

執行下列步驟以完成匯出。

完成匯出
  1. 使用 MySQL CHANGE MASTER 陳述式來設定外部 MySQL 資料庫。指定獲授予 REPLICATION SLAVE 許可之使用者的 ID 和密碼。指定您從 RDS 僅供讀取複本上執行的 MySQL SHOW REPLICA STATUS\G 陳述式所取得的 Master_HostMaster_PortRelay_Master_Log_FileExec_Master_Log_Pos 值。如需詳細資訊,請參閱 MySQL 文件中的 CHANGE MASTER TO 陳述式

    注意

    MySQL 以前的版本使用 SHOW SLAVE STATUS 而不是 SHOW REPLICA STATUS。如果您使用的 MySQL 是 8.0.23 之前的版本,請使用 SHOW SLAVE STATUS

  2. 使用 MySQL START REPLICA 命令啟動從來源 MySQL 資料庫執行個體複寫到外部 MySQL 資料庫。

    這樣做會從來源 MySQL 資料庫執行個體開始複寫,並匯出自停止從僅供 Amazon RDS 讀取複本複寫之後發生的所有來源變更。

    注意

    MySQL 以前的版本使用 START SLAVE 而不是 START REPLICA。如果您使用的 MySQL 是 8.0.23 之前的版本,請使用 START SLAVE

  3. 在外部 MySQL 資料庫上執行 MySQL SHOW REPLICA STATUS\G 命令,以確認它是以僅供讀取複本的方式運作。如需解譯結果的詳細資訊,請參閱 MySQL 文件中的 SHOW SLAVE | REPLICA STATUS 陳述式

  4. 當外部 MySQL 資料庫上的複寫已與來源 MySQL 資料庫執行個體同步之後,請使用 MySQL STOP REPLICA 命令停止來源 MySQL 資料庫執行個體複寫。

    注意

    MySQL 以前的版本使用 STOP SLAVE 而不是 STOP REPLICA。如果您使用的 MySQL 是 8.0.23 之前的版本,請使用 STOP SLAVE

  5. 在 Amazon RDS 僅供讀取複本上,呼叫 mysql.rds_start_replication 預存程序。這麼做可讓 Amazon RDS 開始從來源 MySQL 資料庫執行個體中清除二進位日誌檔案。