multi-source-replication 為適用於 MySQL 的 RDS 進行設定 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

multi-source-replication 為適用於 MySQL 的 RDS 進行設定

使用多來源複寫,您可以將 Amazon RDS for MySQL 資料庫執行個體設定為複本,以接收來自多個 RDS for MySQL 來源資料庫執行個體的二進位記錄事件。執行下列引擎版本的 RDS for MySQL 資料庫執行個體支援多來源複寫:

  • 8.0.35 及更高版本的次要版本

  • 5.7.44 及更高版本的次要版本

如需 MySQL 多重來源複寫的相關資訊,請參閱 MySQL 文件中的 MySQL 多重來源複寫。MySQL 文件包含有關此功能的詳細資訊,而本主題說明如何在 RDS for MySQL 資料庫執行個體上設定和管理多來源複寫通道。

多重來源複製的使用案例

下列情況適用於在適用於 MySQL 的 RDS 上使用多來源複寫:

  • 需要將不同資料庫執行個體上的多個碎片合併或合併為單一碎片的應用程式。

  • 需要從多個來源合併的資料產生報告的應用程式。

  • 針對在多個 RDS for MySQL 資料庫執行個體之間分散的資料建立合併長期備份的需求。

多重來源複寫的考量與最佳作法

在 RDS for MySQL 上使用多來源複寫之前,請先檢閱下列考量事項和最佳做法:

  • 確定設定為多來源複本的資料庫執行個體具有足夠的資源,例如輸送量、記憶體、CPU 和 IOPS,以處理來自多個來源執行個體的工作負載。

  • 定期監控多重來源複本的資源使用率,並調整儲存體或執行個體組態以處理工作負載,而不會耗費資源。

  • 您可以replica_parallel_workers將系統變數設定為大於的值,在多來源複本上設定多執行緒複製。0在這種情況下,分配給每個通道的線程數是此變量的值,加上一個協調器線程來管理應用程序線程。

  • 適當地設定複寫篩選器以避免衝突。若要將整個資料庫複製到複本上的另一個資料庫,您可以使用--replicate-rewrite-db此選項。例如,您可以將資料庫 A 中的所有表格複製到複本執行個體上的資料庫 B。當所有來源執行個體都使用相同的結構描述命名慣例時,這個方法會很有用。如需選--replicate-rewrite-db項的相關資訊,請參閱 MySQL 文件中的複本伺服器選項和變數

  • 若要避免複寫錯誤,請避免寫入複本。我們建議您在多重來源複本上啟用read_only參數,以封鎖寫入作業。這樣做有助於消除寫入作業衝突所造成的複寫問題。

  • 若要提高在多來源複本上執行的讀取作業 (例如排序和高負載聯結) 的效能,請考慮使用 RDS 最佳化讀取。此功能可協助處理依賴大型暫存資料表或排序檔案的查詢。如需詳細資訊,請參閱 使用 Amazon RDS Optimized Reads 改善 RDS for MySQL 的查詢效能

  • 若要將複寫延遲降到最低並改善多重來源複本的效能,請考慮啟用最佳化寫入。如需詳細資訊,請參閱 使用 RDS Optimized Writes 改善 MySQL 的寫入效能

  • 一次在一個通道上執行管理作業 (例如變更組態),並避免從多個連線對多個通道執行變更。這些作法可能會導致複寫作業發生衝突。例如,從多個連接同時執行rds_skip_repl_error_for_channelrds_start_replication_for_channel程序可能會導致跳過與預期不同的通道上的事件。

  • 您可以在多來源複寫執行個體上啟用備份,並將資料從該執行個體匯出到 Amazon S3 儲存貯體以進行長期存放。不過,也請務必在個別來源執行個體上設定適當保留的備份。如需將快照資料匯出到 Amazon S3 的相關資訊,請參閱將資料庫快照資料匯出至 Amazon S3

  • 若要在多來源複本上分配僅供讀取工作負載,您可以從多來源複本建立僅供讀取複本。您可以根據應用程式的需求,找出不同 AWS 區域 的僅供讀取複本。如需僅供讀取複本的詳細資訊,請參閱 使用 MySQL 僅供讀取複本

多重來源複製的先決條件

設定多重來源複製之前,請先完成下列先決條件。

  • 確定每個來源 RDS for MySQL 資料庫執行個體都已啟用自動備份。啟用自動備份可啟用二進位記錄。若要瞭解如何啟用自動備份,請參閱啟用自動備份

  • 為避免複寫錯誤,建議您封鎖來源資料庫執行個體的寫入作業。您可以在連接至 RDS for MySQL 來源資料庫執行個體的自訂參數群組ON中,將參數設定為。read-only您可以使用 AWS Management Console 或建立新的 AWS CLI 自訂參數群組,或修改既有參數群組。如需詳細資訊,請參閱 建立資料庫參數群組修改資料庫參數群組中的參數

  • 針對每個來源資料庫執行個體,將執行個體的 IP 位址新增至多來源資料庫執行個體的 Amazon 虛擬私有雲 (VPC) 安全群組。若要識別來源資料庫執行個體的 IP 位址,您可以執行命令dig RDS Endpoint。在與目標多來源資料庫執行個體相同的 VPC 中,從 Amazon EC2 執行個體執行命令。

  • 針對每個來源資料庫執行個體,使用用戶端連線至資料庫執行個體,並建立具有複寫所需權限的資料庫使用者,如下列範例所示。

    CREATE USER 'repl_user' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';

在適用於 MySQL 資料庫執行個體的 RDS 上設定多重來源複寫

設定多來源複製通道與設定單一來源複製類似。對於多重來源複製,您必須先在來源執行個體上開啟二進位記錄。然後,您將資料從來源匯入到多來源複本。然後,您可以使用二進位記錄座標或使用 GTID 自動定位,從每個來源開始複寫。

若要將 RDS for MySQL 資料庫執行個體設定為兩個或多個適用於 MySQL 資料庫執行個體的多來源複本,請執行下列步驟。

步驟 1:將資料從來源資料庫執行個體匯入多來源複本

在每個來源資料庫執行個體上執行下列步驟。

在將資料從來源匯入多來源複本之前,請執行SHOW MASTER STATUS指令來判斷目前的二進位記錄檔和位置。請記下這些詳細資料,以便在下一個步驟中使用。在此範例輸出中,檔案為mysql-bin-changelog.000031,位置為107

File Position ----------------------------------- mysql-bin-changelog.000031 107 -----------------------------------

現在,使用,將資料庫從來源資料庫執行個體複製到多來源複本mysqldump,如下列範例所示。

mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u RDS_user_name \ -p RDS_password \ --host=RDS Endpoint | mysql \ --host=RDS Endpoint \ --port=3306 \ -u RDS_user_name \ -p RDS_password

複製資料庫之後,您可以在來源資料庫執行個體OFF上將唯讀參數設定為。

步驟 2:開始從來源資料庫執行個體複寫到多來源複本

針對每個來源資料庫執行個體,使用主要使用者身分證明連線至執行個體,然後執行下列兩個預存程序。這些預存程序會在通道上設定複寫並開始複寫。此範例使用上一個步驟中範例輸出的 binlog 檔案名稱和位置。

CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0, 'channel_1'); CALL mysql.rds_start_replication_for_channel('channel_1');

如需有關使用這些預存程序及其他預存程序來設定和管理複寫通道的詳細資訊,請參閱管理多重來源複製

透過多重來源複製使用篩選器

您可以使用複寫篩選來指定要在多來源複本中複製哪些資料庫和表格。複寫篩選條件可以包含複寫中的資料庫和資料表,或將其排除在複寫之外。如需複製篩選器的詳細資訊,請參閱使用 MySQL 設定複寫篩選條件

透過多重來源複製,您可以全域或在通道層級設定複寫篩選器。通道層級篩選僅適用於執行 8.0 版的受支援資料庫執行個體。下列範例說明如何在全域或頻道層級設定篩選器。

請注意下列多重來源複寫中篩選的需求和行為:

  • 需要通道名稱周圍的反引號(``)。

  • 如果您變更參數群組中的複寫篩選器,則會重新啟動所有具有更新之通道的多來源複本,以動態套用變更。sql_thread如果更新涉及全域篩選器,則會重新啟動處於執行中狀態的所有複寫通道。

  • 所有全域篩選器都會在任何通道特定篩選器之前套用。

  • 如果在通道層級全域套用篩選器,則只會套用通道層級的篩選器。例如,如果濾鏡是replicate_ignore_db="db1,`channel_22`:db2",則replicate_ignore_db設定為會套用至db1除了 for 以外的所有色版channel_22,並且只channel_22會忽略來自的變更db2

範例 1:設定全域篩選

在下列範例中,temp_data資料庫會從每個通道的複寫中排除。

對於LinuxmacOS、或Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"

範例 2:設定通道層級篩選

在下列範例中,來自sample22資料庫的變更只包含在通道中channel_22。同樣地,來自sample99資料庫的變更只包含在通道中channel_99

對於LinuxmacOS、或Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"

監視多重來源複製通道

您可以使用下列方法監視多重來源複本中的個別通道:

  • 若要監視所有通道或特定通道的狀態,請連線到多來源複本並執行SHOW REPLICA STATUSSHOW REPLICA STATUS FOR CHANNEL 'channel_name'命令。如需詳細資訊,請參閱 MySQL 文件中的檢查複寫狀態

  • 若要在複寫通道啟動、停止或移除時接收通知,請使用 RDS 事件通知。如需詳細資訊,請參閱 使用 Amazon RDS 事件通知

  • 若要監視特定通道的延遲,請檢查該通道的ReplicationChannelLag指標。此量度的資料點期間為 60 秒 (1 分鐘),可使用 15 天。若要找出通道的複製通道延遲,請使用執行個體識別碼和複製通道名稱。若要在此延遲超過特定臨界值時接收通知,您可以設定 CloudWatch 警示。如需詳細資訊,請參閱 使用 Amazon CloudWatch 監控 Amazon RDS 指標

適用於 MySQL 的 RDS 上的多重來源複寫的限制

下列限制適用於適用於 MySQL 的 RDS 上的多來源複寫:

  • 目前,適用於 MySQL 的 RDS 支援為多來源複本設定最多 15 個通道。

  • 僅供讀取複本執行個體無法設定為多來源複本。

  • 若要在執行引擎 5.7 版的 RDS for MySQL 上設定多來源複寫,必須在複本執行個體上啟用效能結構描述。在執行 8.0 版引擎的 RDS 上,啟用效能結構描述是選擇性的。

  • 對於執行 5.7 版引擎的 RDS for MySQL,複寫篩選器會套用至所有複寫通道。對於執行 8.0 版引擎的 RDS for MySQL,您可以設定套用至所有複寫通道或個別通道的篩選器。

  • 還原 RDS 快照或執行 P oint-in-time-還原 (PITR) 不會還原多來源複本通道組態。

  • 當您建立多來源複本的僅供讀取複本時,它只會複寫來自多來源執行個體的資料。它不會恢復任何通道配置。

  • MySQL 不支持為每個通道設置不同數量的 parallel 工作程序。根據該replica_parallel_workers值,每個通道都會獲得相同數量的 parallel 工作程序。

如果您的多重來源複寫目標是異地同步備份資料庫叢集,則適用下列額外限制:

  • 在對該執行個體進行任何寫入之前,必須先為來源 RDS for MySQL 執行個體設定通道。

  • 每個適用於 MySQL 的來源 RDS 執行個體都必須啟用以 GTID 為基礎的複寫。

  • 資料庫叢集上的容錯移轉事件會移除多來源複寫組態。還原該組態需要重複設定步驟。