全部產品
Search
文件中心

DataWorks:MySQL分庫分表同步至Hologres(方案1.0)

更新時間:Jun 26, 2024

本文以MySQL分庫分表即時寫入Hologres情境為例,為您介紹如何通過Data Integration同步分庫分表資料至Hologres。

前提條件

  • 已完成Hologres和MySql資料來源配置。您需要將資料庫添加至DataWorks上,以便在同步任務配置時,可通過選擇資料來源名稱來控制同步讀取和寫入的資料庫。本實踐中建立的資料來源名為doc_mysql1,詳情請參見配置MySQL資料來源配置Hologres資料來源

    說明

    資料來源相關能力介紹詳情請參見:資料來源概述

  • 已購買合適規格的獨享Data Integration資源群組。詳情請參見:新增和使用獨享Data Integration資源群組

  • 已完成獨享Data Integration資源群組與資料來源的網路連通。詳情請參見:網路連通方案

  • 已完成資料來源環境準備。

    • Hologres:本實踐需要在目標端建立Schema,所以您需要先授權資料來源配置帳號在Hologres建立Schema的許可權,詳情請參見Hologres許可權模型概述

    • MySQL:來來源資料源為MySQL時,您需要開啟Binlog相關功能,詳情請參見MySQL環境準備

背景資訊

實際業務情境下資料同步通常不能通過一個或多個簡單離線同步或者即時同步任務完成,而是由多個離線同步、即時同步和資料處理等工作群組合完成,這就會導致資料同步情境下的配置複雜度非常高。尤其是在MySQL分庫分表的情境下,上遊的資料庫和表非常多,都需要同時寫入一張Hologres表,如果同時配置多個任務會導致配置非常複雜且營運困難。

針對以上痛點,DataWorksData Integration一鍵同步解決方案提供了面向業務情境的同步任務配置化方案,支援不同資料來源的一鍵同步功能,方便業務簡單快速的進行資料同步。

注意事項

同步資料至Hologres時,目前僅支援將資料寫入分區表子表,暫不支援寫入資料至分區表父表。

需求分析

  • 情境描述:MySQL執行個體有三個分庫分表資料庫order_db01order_db02order_db03。業務上有兩種邏輯表:訂單表t_order和使用者表t_user,其中每張邏輯表分別對應三個資料庫下的兩張物理表。如下圖所示總共3個物理庫,12張分表,分表分別對應兩種邏輯表。資料庫現在需要將這12張分庫分錶的歷史全量資料一次性遷移到Hologres對應的邏輯表中,並且後續能夠即時增量寫入,以滿足使用者即時數倉資料分析等需求。

    同時,為了便於在Hologres表裡區分某條記錄屬於源端哪個物理庫、物理表,則需要在Hologres表中添加上三個附加欄位(src_datasource、src_database、src_table),標識某條記錄的來來源資料源執行個體、資料庫以及表,這三個附加欄位和物理表中的主鍵在Hologres裡構成了唯一鍵,保障了某條物理表記錄在Hologres邏輯表裡的唯一性,全量資料移轉以及即時增量資料寫入時均需要對這三個附加欄位賦值。

  • 需求匯總:

    • 資料:將MySQL全量資料一次性同步至Hologres,增量資料後續即時寫入目標端。

    • 表:將源端分表資料寫入目標單表,並為寫入的Hologres表添加統一首碼。

      • 將分表資料寫入目標單表:將源表滿足t_order.*Regex的表資料寫入到Hologres名為t_order的表中,所有滿足t_user.*Regex的表資料寫入到Hologres名為t_user的表中。

      • 為表加上統一首碼:在目標名前統一加上cdo_首碼。

    • schema:需要將源端所有滿足order_db.*Regex的庫寫入目標Hologres名為order_db的schema中。

    • 欄位:目標表在原有表結構基礎上,增加src_datasource、src_database、src_table欄位用於記錄源端表資料來源。

    綜合如上分析結果,最終的表對應關係如下所示:

    源端分庫

    源端待同步表

    寫入的目標表

    目標表新增欄位

    order_db01

    t_order_01

    cdo_t_order

    src_datasource

    src_database

    src_table

    t_order_02

    t_user_01

    cdo_t_user

    t_user_02

    order_db02

    t_order_03

    cdo_t_order

    t_order_04

    t_user_03

    cdo_t_user

    t_user_04

    order_db03

    t_order_05

    cdo_t_order

    t_order_06

    t_user_05

    cdo_t_user

    t_user_06

操作流程

  1. 步驟一:選擇同步方案

  2. 步驟二:配置網路連通

  3. 步驟三:設定同步來源與規則

  4. 步驟四:設定目標表

  5. 步驟五:設定表粒度同步規則

  6. 步驟六:DDL訊息處理規則

  7. 步驟七:運行資源設定

步驟一:選擇同步方案

建立同步解決方案任務,選擇需要同步的源端資料來源MySQL,目標端資料來源Hologres,並選擇一鍵即時同步至Hologres方案。選擇同步方案

步驟二:配置網路連通

源端選擇已建立的資料來源doc_mysql1,目標資料來源為DataWorks工作空間建立的Hologres資料來源。並測試連通性。

步驟三:設定同步來源與規則

  1. 基本配置地區,配置同步解決方案的名稱、任務存放位置等資訊。

  2. 資料來源地區,確認需要同步的源端資料來源相關資訊。

  3. 選擇同步的源表地區,選中需要同步的源表,單擊表徵圖表徵圖,將其移動至已選源表

    該地區會為您展示所選資料來源下所有的表,您可以選擇整庫全表或部分表進行同步。

  4. 設定表(庫)名的映射規則地區,單擊添加規則,選擇相應的規則進行添加。

    同步時預設將源端資料表寫入目的端同名schema或同名表中,同時,您可以通過添加映射規則定義最終寫入目的端的schema或表名稱,實現將多張表資料寫入到同一個目標表中,或統一將源端某固定首碼的表名在寫入目標表時更新為其他首碼。支援通過Regex轉換寫入的schema名或表名,還支援使用內建變數拼接目標表名。配置邏輯請參見:設定同步來源與規則

    在本實踐中,我們需要將MySQL資料庫中的12張分庫分表寫入對應的兩張Hologres表中。設定表(庫)名映射規則如下:目標表名

    • 源表名和目標表名轉換規則:支援將源表名通過Regex轉換為目標表名。

      如上圖所示設定為要搜尋的字串t_order.*,將源表所有滿足t_order.*Regex的表資料寫入到Hologres名為t_order表中;所有滿足t_user.*Regex的源表寫入到Hologres名為t_user表中。

    • 目標表名規則:支援您使用內建的變數組合產生目標表名,同時,對轉換後的目標表名支援添加首碼和尾碼。如上圖所示為源表名和目標表名轉換規則轉換後的表名前統一加上cdo_首碼。

    • 源表名和目標Schema名轉換規則:若要將多個物理庫即時寫入一個目標Schema中,您需要將物理庫和目標schema進行轉換(預設源庫寫入目標同名schema)。如上圖所示將所有滿足order_db.*Regex的源庫寫入目標Hologres名為order_db的schema中。

步驟四:設定目標表

  1. 確認寫入Hologres的策略。

    寫入Hologres策略目前僅支援重放,重放表示鏡像功能,即源端INSERT一條記錄,Hologres中也INSERT一條記錄;源端執行UPDATE或DELETE操作,Hologres中也進行UPDATE或DELETE。

  2. 重新整理源表和Hologres表映射。

    單擊重新整理源表和Hologres表映射,將根據您在步驟三配置的目標表映射規則來產生目標表,若步驟三未配置映射規則,將預設寫入與源表同名的目標表,若目標端不存在該同名表,將預設建立。同時,您可以修改表建立方式、為目標表在源有表欄位基礎上增加附加欄位。

    該步驟Data Integration會自動拉取要同步的源表表結構,並按照表(庫)名轉換規則將其自動對應到目標Hologres表。單擊重新整理源表和Hologres表映射,結果如下:結果

  3. 大量新增附加欄位。

    為了更好的區分上遊表的來源,需要為目標表添加附加欄位。

    1. 勾選所有的任務,並單擊大量編輯目標表附加欄位

      說明

      僅在表建立方式自動建表時,可以使用此功能。

    2. 大量編輯目標表附加欄位彈窗,單擊新增欄位,新增src_datasource、src_database和src_table三個欄位。並為欄位賦值。附加欄位

      說明

      Data Integration附加欄位支援的變數欄位如下:

      EXECUTE_TIME:執行時間
      UPDATE_TIME:更新時間
      DB_NAME_SRC:未經處理資料庫名稱
      DB_NAME_SRC_TRANSED:轉換後資料庫名稱
      DATASOURCE_NAME_SRC:源端資料來源名稱
      DATASOURCE_NAME_DEST:目的端資料來源名稱
      DB_NAME_DEST:目的端資料庫名稱
      TABLE_NAME_DEST:目的端表名稱
      TABLE_NAME_SRC:源端表名稱

步驟五:設定表粒度同步規則

即當源表發生插入、更新、刪除時,您可以在此處定義對應的處理策略。

  • 正常處理:源端DML訊息將會繼續下發給目標資料來源,由目標資料來源來處理。

  • 忽略:直接丟棄該訊息,不再向目標資料來源發送對應的DML訊息,對應資料不會改變。

  • 有條件的正常處理:選擇後,您可以配置過濾條件,同步任務將按照您配置的過濾運算式對源端資料進行過濾,滿足過濾條件的資料會被正常處理,不滿足的會被忽略掉。

說明

若不設定,則預設為“正常處理”。

步驟六:DDL訊息處理規則

來來源資料源會包含許多DDL操作,Data Integration體提供預設處理策略,您也可以根據業務需求,對不同的DDL訊息設定同步至目標端的處理策略。不同DDL訊息處理策略請參見:DDL訊息處理規則

步驟七:運行資源設定

當前方案建立後將分別產生全量資料離線同步子任務和增量資料即時同步子任務。您需要在運行資源設定介面配置離線同步任務和即時同步任務的相關屬性。

包括即時增量同步處理及離線全量同步使用的獨享Data Integration資源群組,同時,單擊進階配置可配置是否容忍髒資料、任務最大並發數、源庫允許支援的最大串連數等參數。

說明
  • DataWorks的離線同步任務通過調度資源群組將其下發到Data Integration任務執行資源組上執行,所以離線同步任務除了涉及Data Integration任務執行資源組外,還會佔用調度資源群組資源。如果使用了獨享調度資源群組,將會產生調度執行個體費用。您可通過任務下發機制對該機制進行瞭解。

  • 離線和即時同步任務推薦使用不同的資源群組,以便任務分開執行。如果選擇同一個資源群組,任務混跑會帶來資源搶佔、運行態互相影響等問題。例如,CPU、記憶體、網路等互相影響,可能會導致離線任務變慢或即時任務延遲等問題,甚至在資源不足的極端情況下,可能會出現任務被OOM KILLER殺掉等問題。

步驟八:執行同步任務

  1. 進入Data Integration > 同步任務介面,找到已建立的同步方案。

  2. 單擊操作列的提交執行按鈕,啟動同步的運行。

  3. 單擊操作列的執行詳情,查看任務的詳細執行過程。

後續步驟

完成任務配置後,您可以對已建立的任務進行管理、執行加減表操作,或對任務配置監控警示,並查看任務啟動並執行關鍵計量等。詳情請參見:全增量同步處理任務營運