本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Amazon RDS for MySQL multi-source-replication
透過多來源複寫,您可以將 Amazon RDS for MySQL 資料庫執行個體設定為從多個 RDS for MySQL 來源資料庫執行個體接收二進位日誌事件的複本。執行下列引擎版本的 RDS for MySQL 資料庫執行個體支援多來源複寫:
-
所有 MySQL 8.4 版本
8.0.35 和更新的次要版本
5.7.44 和更新的次要版本
如需有關 MySQL 多來源複寫的資訊,請參閱 MySQL 文件中的 MySQL 多來源複寫
多來源複寫的使用案例
下列案例適合在 RDS for MySQL 上使用多來源複寫:
-
需要將不同資料庫執行個體上的多個碎片合併或合併為單一碎片的應用程式。
-
需要從多個來源合併的資料產生報告的應用程式。
-
建立在多個 RDS for MySQL 資料庫執行個體之間分佈之資料的合併長期備份的要求。
多來源複寫的先決條件
設定多來源複寫之前,請先完成下列先決條件。
請確定每個來源 RDS for MySQL 資料庫執行個體都已啟用自動備份。啟用自動備份可啟用二進位記錄。若要了解如何啟用自動備份,請參閱 啟用自動備份。
為了避免複寫錯誤,建議您封鎖來源資料庫執行個體的寫入操作。您可以在連接至 RDS for MySQL 來源資料庫執行個體的自訂參數群組
ON
中,將read-only
參數設定為 。您可以使用 AWS Management Console 或 AWS CLI 建立新的自訂參數群組,或修改現有的參數群組。如需詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組及修改 Amazon RDS 中資料庫參數群組中的參數。對於每個來源資料庫執行個體,請將執行個體的 IP 地址新增至多來源資料庫執行個體的 Amazon Virtual Private Cloud (VPC) 安全群組。若要識別來源資料庫執行個體的 IP 地址,您可以執行命令
dig
。在與目的地多來源資料庫執行個體相同的 VPC 中,從 Amazon EC2 執行個體執行 命令。RDS Endpoint
對於每個來源資料庫執行個體,請使用用戶端連線至資料庫執行個體,並建立具有複寫所需權限的資料庫使用者,如下列範例所示。
CREATE USER '
repl_user
' IDENTIFIED BY 'password
'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user
';注意
從 MySQL 8.4 開始,
REPLICATION SLAVE
權限已棄用,並以 取代。REPLICATION REPLICA
對於 MySQL 8.4 和更新版本,請改用下列語法:CREATE USER '
repl_user
' IDENTIFIED BY 'password
'; GRANT REPLICATION CLIENT, REPLICATION REPLICA ON *.* TO 'repl_user
';
在 RDS for MySQL 資料庫執行個體上設定多來源複寫通道
設定多來源複寫通道類似於設定單一來源複寫。對於多來源複寫,您必須先在來源執行個體上開啟二進位記錄。然後,您將資料從來源匯入多來源複本。然後,您可以使用二進位日誌座標或使用 GTID 自動定位,從每個來源開始複寫。
若要將 RDS for MySQL 資料庫執行個體設定為兩個或多個 RDS for MySQL 資料庫執行個體的多來源複本,請執行下列步驟。
步驟 1:將資料從來源資料庫執行個體匯入至多來源複本
在每個來源資料庫執行個體上執行下列步驟。
將資料從來源匯入至多來源複本之前,請執行 SHOW MASTER STATUS
命令來判斷目前的二進位日誌檔案和位置。請記下這些詳細資訊,以供下一個步驟使用。在此範例輸出中,檔案為 mysql-bin-changelog.000031
,位置為 107
。
注意
從 MySQL 8.4 開始,SHOW MASTER STATUS
命令已棄用,並以 取代。 SHOW BINARY LOG STATUS
對於 MySQL 8.4 和更新版本,請SHOW BINARY LOG STATUS
改用 。
File Position ----------------------------------- mysql-bin-changelog.000031 107 -----------------------------------
現在,使用 將資料庫從來源資料庫執行個體複製到多來源複本mysqldump
,如下列範例所示。
mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u
RDS_user_name
\ -pRDS_password
\ --host=RDS Endpoint
| mysql \ --host=RDS Endpoint
\ --port=3306 \ -uRDS_user_name
\ -pRDS_password
複製資料庫之後,您可以在OFF
來源資料庫執行個體上將唯讀參數設定為 。
步驟 2:開始從來源資料庫執行個體複寫至多來源複本
對於每個來源資料庫執行個體,請使用管理使用者登入資料來連線至執行個體,並執行下列兩個預存程序。這些預存程序會在頻道上設定複寫並開始複寫。此範例使用上一個步驟中範例輸出的 binlog 檔案名稱和位置。
CALL mysql.rds_set_external_source_for_channel('
mysourcehost.example.com
', 3306, 'repl_user
', 'password
', 'mysql-bin-changelog.000031
',107
, 1, 'channel_1
'); CALL mysql.rds_start_replication_for_channel('channel_1
');
如需使用這些預存程序和其他程序來設定和管理複寫通道的詳細資訊,請參閱 管理多來源複寫。
搭配多來源複寫使用篩選條件
您可以使用複寫篩選條件來指定要在多來源複本中複寫哪些資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表,或將其排除在複寫之外。如需複寫篩選條件的詳細資訊,請參閱 使用 My 設定複寫篩選條件SQL。
透過多來源複寫,您可以全域或在頻道層級設定複寫篩選條件。頻道層級篩選僅適用於執行 8.0 版或 8.4 版的支援資料庫執行個體。下列範例示範如何全域或在頻道層級設定篩選條件。
請注意下列在多來源複寫中篩選的要求和行為:
頻道名稱的反引號 (``) 為必要項目。
如果您在參數群組中變更複寫篩選條件,則會重新啟動具有更新之所有通道
sql_thread
的多來源複本,以動態套用變更。如果更新涉及全域篩選條件,則處於執行中狀態的所有複寫通道都會重新啟動。所有全域篩選條件都會套用在任何頻道特定的篩選條件之前。
如果全域套用篩選條件,並在頻道層級套用,則只會套用頻道層級篩選條件。例如,如果篩選條件是
replicate_ignore_db="db1,`channel_22`:db2"
,則replicate_ignore_db
設定為db1
會套用至 以外的所有頻道channel_22
,而且只會channel_22
忽略 的變更db2
。
範例 1:設定全域篩選條件
在下列範例中,temp_data
資料庫會從每個頻道的複寫中排除。
對於 Linux、 macOS或 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
。
對於 Linux、 macOS或 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 STATUS
或SHOW REPLICA STATUS FOR CHANNEL '
命令。如需詳細資訊,請參閱 MySQL 文件中的檢查複寫狀態channel_name
'。 若要在複寫頻道啟動、停止或移除時接收通知,請使用 RDS 事件通知。如需詳細資訊,請參閱使用 Amazon RDS 事件通知。
若要監控特定頻道的延遲,請檢查其
ReplicationChannelLag
指標。此指標的資料點有 60 秒 (1 分鐘) 的期間,可供使用 15 天。若要尋找頻道的複寫頻道延遲,請使用執行個體識別符和複寫頻道名稱。若要在延遲超過特定閾值時接收通知,您可以設定 CloudWatch 警示。如需詳細資訊,請參閱使用 Amazon CloudWatch 監控 Amazon RDS 指標。
多來源複寫的考量事項和最佳實務
在 RDS for MySQL 上使用多來源複寫之前,請檢閱下列考量事項和最佳實務:
-
請確定設定為多來源複本的資料庫執行個體具有足夠的資源,例如輸送量、記憶體、CPU 和 IOPS,以處理來自多個來源執行個體的工作負載。
-
定期監控多來源複本上的資源使用率,並調整儲存體或執行個體組態以處理工作負載,而不會耗費資源。
-
您可以透過將系統變數設定為大於
replica_parallel_workers
的值,在多來源複本上設定多執行緒複寫0
。在這種情況下,分配給每個頻道的執行緒數量是此變數的值,加上一個協調器執行緒來管理附加執行緒。 -
適當地設定複寫篩選條件,以避免衝突。若要將整個資料庫複寫到複本上的另一個資料庫,您可以使用
--replicate-rewrite-db
選項。例如,您可以將資料庫 A 中的所有資料表複寫到複本執行個體上的資料庫 B。當所有來源執行個體都使用相同的結構描述命名慣例時,此方法會很有幫助。如需--replicate-rewrite-db
選項的相關資訊,請參閱 MySQL 文件中的複本伺服器選項和變數。 -
若要避免複寫錯誤,請避免寫入複本。建議您在多來源複本上啟用
read_only
參數,以封鎖寫入操作。這樣做有助於消除因寫入操作衝突而導致的複寫問題。 -
若要提高讀取操作的效能,例如在多來源複本上執行的排序和高負載聯結,請考慮使用 RDS Optimized Reads。此功能可協助處理相依於大型暫存資料表或排序檔案的查詢。如需詳細資訊,請參閱改善 RDS MySQL with Amazon RDS Optimized Reads 的查詢效能。
-
若要將複寫延遲降至最低並改善多來源複本的效能,請考慮啟用最佳化寫入。如需詳細資訊,請參閱使用 My 的RDS最佳化寫入來改善寫入效能SQL。
-
一次在一個頻道上執行管理操作 (例如變更組態),並避免從多個連線對多個頻道執行變更。這些實務可能會導致複寫操作中的衝突。例如,同時從多個連線執行
rds_skip_repl_error_for_channel
和rds_start_replication_for_channel
程序可能會導致略過與預期不同的頻道上的事件。 -
您可以在多來源複寫執行個體上啟用備份,並將資料從該執行個體匯出至 Amazon S3 儲存貯體,以長期儲存資料。不過,也請務必在個別來源執行個體上設定具有適當保留的備份。如需將快照資料匯出至 Amazon S3 的資訊,請參閱 將資料庫快照資料匯出至 Amazon RDS 的 Amazon S3 。
-
若要在多來源複本上分配讀取工作負載,您可以從多來源複本建立僅供讀取複本。您可以 AWS 區域 根據您應用程式的需求,在不同的 中尋找這些僅供讀取複本。如需僅供讀取複本的詳細資訊,請參閱 使用我的SQL僅供讀取複本。
RDS for MySQL 上多來源複寫的限制
下列限制適用於 RDS for MySQL 上的多來源複寫:
-
目前,RDS for MySQL 支援為多來源複本設定最多 15 個頻道。
-
僅供讀取複本執行個體無法設定為多來源複本。
-
若要在執行引擎 5.7 版的 RDS for MySQL 上設定多來源複寫,必須在複本執行個體上啟用效能結構描述。在執行引擎 8.0 或 8.4 版的 RDS for MySQL 上,可選用啟用效能結構描述。
-
對於執行引擎 5.7 版的 RDS for MySQL,複寫篩選條件適用於所有複寫通道。對於執行引擎 8.0 或 8.4 版的 RDS for MySQL,您可以設定套用至所有複寫通道或個別通道的篩選條件。
-
還原 RDS 快照或執行Point-in-time-Restore(PITR) 不會還原多來源複本頻道組態。
-
當您建立多來源複本的僅供讀取複本時,它只會從多來源執行個體複寫資料。它不會還原任何頻道組態。
-
MySQL 不支援為每個頻道設定不同數量的平行工作者。根據
replica_parallel_workers
值,每個頻道都會取得相同數量的平行工作者。
如果您的多來源複寫目標為多可用區域資料庫叢集,則適用下列其他限制:
必須為來源 RDS for MySQL 執行個體設定頻道,才能對該執行個體進行任何寫入。
-
每個來源 RDS for MySQL 執行個體都必須啟用 GTID 型複寫。
-
資料庫叢集上的容錯移轉事件會移除多來源複寫組態。還原該組態需要重複組態步驟。