全部產品
Search
文件中心

Data Transmission Service:PolarDB MySQL版間的雙向同步

更新時間:Jul 06, 2024

Data Transmission Service支援兩個PolarDB MySQL版叢集間的雙向資料同步,適用於異地多活、異地容災等多種應用情境。本文介紹雙向資料同步的配置步驟。

前提條件

  • 已購買源和目標PolarDB MySQL版叢集(簡稱PolarDB叢集),詳情請參見購買企業版叢集

  • 源和目標PolarDB MySQL版叢集已開啟Binlog,詳情請參見如何開啟Binlog

注意事項

  • DTS在執行全量資料初始化時將佔用源庫和目標庫一定的讀寫資源,可能會導致資料庫的負載上升,在資料庫效能較差、規格較低或業務量較大的情況下(例如源庫有大量慢SQL、存在無主鍵表或目標庫存在死結等),可能會加重資料庫壓力,甚至導致資料庫服務不可用。因此您需要在執行資料同步前評估源庫和目標庫的效能,同時建議您在業務低峰期執行資料同步(例如源庫和目標庫的CPU負載在30%以下)。

  • 全量初始化過程中,並發INSERT會導致目的地組群的表片段,全量初始化完成後,目的地組群的資料表空間比源叢集的資料表空間大。

  • 如果資料同步的源叢集沒有主鍵或唯一約束,且記錄的全欄位沒有唯一性,可能會出現重複資料。

  • 雙向同步執行個體包含正向和反向同步任務,在配置或重設雙向同步執行個體時,若其中一個任務的目標對象是另一個任務待同步的對象:

    • 僅允許其中一個任務同步全量和增量資料,另一個任務僅支援同步增量資料。

    • 當前任務的來源資料僅支援同步到當前任務的目標端,同步過來的資料不會作為另一個任務的來源資料繼續同步。

費用說明

同步類型鏈路配置費用
庫表結構同步和全量資料同步不收費。
增量資料同步收費,詳情請參見計費概述

功能限制

  • 目前DTS僅支援一對一雙向同步,暫不支援多個PolarDB MySQL版叢集間的雙向同步。

  • 資料同步時,請勿對源庫的同步對象使用gh-ost或pt-online-schema-change等類似工具執行線上DDL變更,否則會導致同步失敗。

  • 不相容觸發器

    當同步對象為整個庫,且庫中的觸發器(TRIGGER)會更新庫內某個表時,可能導致源和目標庫的資料不一致。相關解決方案請參見源庫存在觸發器時如何配置同步或遷移作業

  • RENAME TABLE限制

    RENAME TABLE操作可能導致同步資料不一致。例如同步對象只包含某個表,如果同步過程中源執行個體對該表執行了重新命名操作,那麼該表的資料將不會同步到目標庫。為避免該問題,您可以在資料同步配置時將該表所屬的整個資料庫作為同步對象。

  • DDL文法同步方向限制

    為保障雙向同步鏈路的穩定性,DDL更新只能在其中一個同步方向進行同步。即一旦某個同步方向配置了DDL同步,則在反方向上不支援DDL同步,只進行DML同步。

支援同步的SQL操作

操作類型

SQL動作陳述式

DML

INSERT、UPDATE、DELETE、REPLACE

DDL

  • ALTER TABLE、ALTER VIEW

  • CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW

  • DROP INDEX、DROP TABLE

  • RENAME TABLE

    重要

    RENAME TABLE操作可能導致同步資料不一致。例如同步對象只包含某個表,如果同步過程中源執行個體對該表執行了重新命名操作,那麼該表的資料將不會同步到目標庫。為避免該問題,您可以在資料同步配置時將該表所屬的整個資料庫作為同步對象,且確保RENAME TABLE操作前後的表所屬的資料庫均在同步對象中。

  • TRUNCATE TABLE

重要

僅正向任務(即源庫同步至目標庫)支援同步DDL,反向任務(即目標庫同步至源庫)不支援同步DDL,將自動過濾DDL操作。

支援的衝突檢測

為保障同步資料的一致性,您需要確保同一個主鍵、業務主鍵或唯一鍵的記錄只在一個PolarDB叢集上執行更新。如果發生了誤操作,在兩個PolarDB MySQL版叢集上均執行更新,那麼將出現同步衝突。

DTS通過衝突檢測和修複最大程度地維護雙向同步執行個體的穩定性。目前DTS支援進行檢測的衝突類型包括:

  • INSERT導致的唯一性衝突

    同步INSERT語句時違背了唯一性限制式,例如雙向同步的兩個節點同時或者在極為接近的時間新增了某個主索引值相同的記錄,那麼同步到對端時,會因為已經存在相同主索引值的記錄,導致INSERT操作的同步失敗。

  • UPDATE更新的記錄不完全符合

    • UPDATE要更新的記錄在同步目的地組群中不存在時,DTS會自動轉化為INSERT,此時可能會出現唯一鍵的唯一性衝突。

    • UPDATE要更新的記錄出現主鍵或唯一鍵衝突。

  • DELETE對應的記錄不存在

    DELETE要刪除的記錄在同步的目的地組群中不存在。出現這種衝突時,不論配置何種衝突修複策略,DTS都會自動忽略DELETE操作。

重要
  • 由於資料同步兩端的系統時間可能存在差異、同步存在延時等多種因素,DTS無法完全保證衝突檢測機制能夠完全防止資料的衝突。在使用雙向同步時,您需要在業務層面配合進行相應的改造,保證同一個主鍵、業務主鍵或唯一鍵的記錄只在雙向同步的某個節點進行更新。

  • 對於上述資料同步的衝突,DTS提供了修複策略,您可以在配置雙向同步時選擇。

操作步驟

  1. 購買資料同步作業,詳情請參見購買流程

    重要

    購買時,選擇源執行個體和目標執行個體均為PolarDB,並選擇同步拓撲為雙向同步

  2. 登入資料轉送控制台

    說明

    若資料轉送控制台自動跳轉至Data Management控制台,您可以在右下角的jiqiren中單擊返回舊版,返回至舊版資料轉送控制台。

  3. 在左側導覽列,單擊資料同步

  4. 同步作業列表頁面頂部,選擇同步的目標執行個體所屬地區。

  5. 配置正向同步作業。

    1. 定位至已購買的資料同步執行個體,單擊該執行個體下第一個同步作業操作列的配置同步鏈路

      重要

      一個雙向資料同步執行個體會包含兩個同步作業,需要分別進行配置。在配置反向同步作業時,定位至第二個同步作業,單擊操作列的配置同步鏈路

      雙向同步任務

    2. 配置同步作業的源叢集及目的地組群資訊。

      配置源和目標執行個體資訊

      類別

      配置

      說明

      同步作業名稱

      DTS會自動產生一個同步作業名稱,建議配置具有業務意義的名稱(無唯一性要求),便於後續識別。

      源執行個體資訊

      執行個體類型

      固定為PolarDB執行個體,不可變更。

      執行個體地區

      購買資料同步執行個體時選擇的源執行個體地區資訊,不可變更。

      PolarDB執行個體ID

      選擇源PolarDB MySQL版叢集ID。

      重要

      稍後配置反向同步作業時,此處需選擇為正向同步作業裡的目標PolarDB叢集ID。

      資料庫帳號

      填入串連PolarDB MySQL版叢集的資料庫帳號,該帳號需具備待同步對象讀寫權限。

      資料庫密碼

      填入資料庫帳號的密碼。

      目標執行個體資訊

      執行個體類型

      固定為PolarDB執行個體,不可變更。

      執行個體地區

      購買資料同步執行個體時選擇的目標執行個體地區資訊,不可變更。

      PolarDB執行個體ID

      選擇目標PolarDB MySQL版叢集ID。

      重要

      稍後配置反向同步作業時,此處需選擇為正向同步作業裡的源PolarDB叢集ID。

      資料庫帳號

      填入串連PolarDB MySQL版叢集的資料庫帳號,該帳號需具備目標同步對象讀寫權限。

      資料庫密碼

      填入資料庫帳號的密碼。

    3. 單擊頁面右下角的授權白名單並進入下一步

      說明
      • 如果源或目標資料庫是阿里雲資料庫執行個體(例如RDS MySQLApsaraDB for MongoDB等)或ECS上的自建資料庫,DTS會自動將對應地區DTS服務的IP地址添加到阿里雲資料庫執行個體的白名單或ECS的安全規則中,您無需手動添加,請參見DTS伺服器的IP位址區段

      • DTS任務完成或釋放後,建議您手動刪除添加的DTS伺服器IP位址區段。

    4. 配置同步策略及對象資訊。

      RDS雙向同步對象及策略配置

      類別

      配置

      說明

      同步策略配置

      是否過濾DDL

      • 選擇為:不同步DDL操作。

      • 選擇為:同步DDL操作。

        重要

        DDL文法同步方向限制 。為保障雙向同步鏈路的穩定性,只支援正向同步DDL,不支援反向同步DDL。

      DML同步類型

      選擇需要同步的DML類型,預設為InsertUpdateDelete,您可以根據業務需求調整。

      衝突修複策略

      選擇同步衝突的修複策略,預設為TaskFailed,您可以根據業務情況選擇合適的衝突修複策略。

      • TaskFailed(遇到衝突,任務報錯退出)

        預設的衝突修複策略。當資料同步遇到上述衝突類型時,同步任務直接報錯並退出,同步任務進入失敗狀態,需要使用者介入修複任務。

      • Ignore(遇到衝突,直接使用目標執行個體中的衝突記錄)

        當資料同步遇到上述的衝突類型時,直接跳過當前同步語句,繼續往下執行,選擇使用目標庫中的衝突記錄。

      • Overwrite(遇到衝突,直接覆蓋目標執行個體中的衝突記錄)

        當資料同步遇到上述的衝突類型時,直接覆蓋目標庫中的衝突記錄。

      選擇同步對象

      源庫對象框中單擊待同步的對象(選擇粒度為庫或表),然後單擊向右小箭頭將其移動到已選擇對象框。

      重要
      • 如果選擇整個庫作為同步對象,該庫中所有對象的結構變更操作都會同步至目標庫。

      • 預設情況下,同步對象的名稱保持不變。如果您需要改變同步對象在目標庫中的名稱,需要使用對象名映射功能,詳情請參見設定同步對象在目標執行個體中的名稱

      映射名稱更改

      如需更改同步對象在目標執行個體中的名稱,請使用對象名映射功能,詳情請參見庫表列映射

      源表DMS_ONLINE_DDL過程中是否複製暫存資料表到目標庫

      如源庫使用Data Management(Data Management)執行Online DDL變更,您可以選擇是否同步Online DDL變更產生的暫存資料表資料。

      • :同步Online DDL變更產生的暫存資料表資料。

        說明

        Online DDL變更產生的暫存資料表資料過大,可能會導致同步任務延遲。

      • :不同步Online DDL變更產生的暫存資料表資料,只同步源庫的原始DDL資料。

        說明

        該方案會導致目標庫鎖表。

      源、目標庫無法串連重試時間

      當源、目標庫無法串連時,DTS預設重試720分鐘(即12小時),您也可以自訂重試時間。如果DTS在設定的時間內重新串連上源、目標庫,同步任務將自動回復。否則,同步任務將失敗。

      說明

      由於串連重試期間,DTS將收取任務運行費用,建議您根據業務需要自訂重試時間,或者在源和目標庫執行個體釋放後儘快釋放DTS執行個體。

    5. 上述配置完成後,單擊頁面右下角的下一步

    6. 配置同步初始化的進階配置資訊。

      polardb雙向同步進階配置

      重要
      • 此步驟會將源叢集中待同步對象的結構及資料同步至目的地組群,作為後續增量同步處理資料的基準資料。同步初始化類型細分為:結構初始化全量資料初始化。預設情況下,需要同時選擇結構初始化全量資料初始化

      • 在配置反向同步作業時,如果同步對象已經初始化至目的地組群,則直接同步處理增量資料。

    7. 上述配置完成後,單擊頁面右下角的預檢查並啟動

      說明
      • 在同步作業正式啟動之前,會先進行預檢查。只有預檢查通過後,才能成功啟動同步作業。

      • 如果預檢查失敗,單擊具體檢查項後的提示,查看失敗詳情。

        • 您可以根據提示修複後重新進行預檢查。

        • 如無需修複警示檢測項,您也可以選擇確認屏蔽忽略警示項並重新進行預檢查,跳過警示檢測項重新進行預檢查。

    8. 預檢查對話方塊中顯示預檢查通過後,關閉預檢查對話方塊,正向同步作業將正式開始。

  6. 等待正向同步作業完成初始化,直至處於同步中狀態。

    您可以在資料同步頁面,查看資料同步作業的狀態。

  7. 配置反向同步作業。

    1. 定位至第二個同步作業,單擊配置同步鏈路

      配置反向同步作業

    2. 重複步驟5中的ii到viii配置步驟,完成反向同步作業的配置。

執行結果

等待一段時間後,兩個同步作業的鏈路狀態均會處於同步中Polardb雙向同步結果