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