MySQL分庫分表同步至Hologres(方案1.0)
本文以MySQL分庫分表實(shí)時(shí)寫入Hologres場(chǎng)景為例,為您介紹如何通過數(shù)據(jù)集成同步分庫分表數(shù)據(jù)至Hologres。
前提條件
已完成Hologres和MySql數(shù)據(jù)源配置。您需要將數(shù)據(jù)庫添加至DataWorks上,以便在同步任務(wù)配置時(shí),可通過選擇數(shù)據(jù)源名稱來控制同步讀取和寫入的數(shù)據(jù)庫。本實(shí)踐中創(chuàng)建的數(shù)據(jù)源名為
doc_mysql1
,詳情請(qǐng)參見配置MySQL數(shù)據(jù)源、配置Hologres數(shù)據(jù)源。說明數(shù)據(jù)源相關(guān)能力介紹詳情請(qǐng)參見:數(shù)據(jù)源概述。
已購買合適規(guī)格的獨(dú)享數(shù)據(jù)集成資源組。詳情請(qǐng)參見:新增和使用獨(dú)享數(shù)據(jù)集成資源組。
已完成獨(dú)享數(shù)據(jù)集成資源組與數(shù)據(jù)源的網(wǎng)絡(luò)連通。詳情請(qǐng)參見:網(wǎng)絡(luò)連通方案。
已完成數(shù)據(jù)源環(huán)境準(zhǔn)備。
Hologres:本實(shí)踐需要在目標(biāo)端創(chuàng)建Schema,所以您需要先授權(quán)數(shù)據(jù)源配置賬號(hào)在Hologres創(chuàng)建Schema的權(quán)限,詳情請(qǐng)參見Hologres權(quán)限模型概述。
MySQL:來源數(shù)據(jù)源為MySQL時(shí),您需要開啟Binlog相關(guān)功能,詳情請(qǐng)參見MySQL環(huán)境準(zhǔn)備。
背景信息
實(shí)際業(yè)務(wù)場(chǎng)景下數(shù)據(jù)同步通常不能通過一個(gè)或多個(gè)簡(jiǎn)單離線同步或者實(shí)時(shí)同步任務(wù)完成,而是由多個(gè)離線同步、實(shí)時(shí)同步和數(shù)據(jù)處理等任務(wù)組合完成,這就會(huì)導(dǎo)致數(shù)據(jù)同步場(chǎng)景下的配置復(fù)雜度非常高。尤其是在MySQL分庫分表的場(chǎng)景下,上游的數(shù)據(jù)庫和表非常多,都需要同時(shí)寫入一張Hologres表,如果同時(shí)配置多個(gè)任務(wù)會(huì)導(dǎo)致配置非常復(fù)雜且運(yùn)維困難。
針對(duì)以上痛點(diǎn),DataWorks數(shù)據(jù)集成一鍵同步解決方案提供了面向業(yè)務(wù)場(chǎng)景的同步任務(wù)配置化方案,支持不同數(shù)據(jù)源的一鍵同步功能,方便業(yè)務(wù)簡(jiǎn)單快速的進(jìn)行數(shù)據(jù)同步。
注意事項(xiàng)
同步數(shù)據(jù)至Hologres時(shí),目前僅支持將數(shù)據(jù)寫入分區(qū)表子表,暫不支持寫入數(shù)據(jù)至分區(qū)表父表。
需求分析
場(chǎng)景描述:MySQL實(shí)例有三個(gè)分庫分表數(shù)據(jù)庫
order_db01
、order_db02
、order_db03
。業(yè)務(wù)上有兩種邏輯表:訂單表t_order
和用戶表t_user
,其中每張邏輯表分別對(duì)應(yīng)三個(gè)數(shù)據(jù)庫下的兩張物理表。如下圖所示總共3個(gè)物理庫,12張分表,分表分別對(duì)應(yīng)兩種邏輯表。現(xiàn)在需要將這12張分庫分表的歷史全量數(shù)據(jù)一次性遷移到Hologres對(duì)應(yīng)的邏輯表中,并且后續(xù)能夠?qū)崟r(shí)增量寫入,以滿足用戶實(shí)時(shí)數(shù)倉數(shù)據(jù)分析等需求。同時(shí),為了便于在Hologres表里區(qū)分某條記錄屬于源端哪個(gè)物理庫、物理表,則需要在Hologres表中添加上三個(gè)附加字段(src_datasource、src_database、src_table),標(biāo)識(shí)某條記錄的來源數(shù)據(jù)源實(shí)例、數(shù)據(jù)庫以及表,這三個(gè)附加字段和物理表中的主鍵在Hologres里構(gòu)成了唯一鍵,保障了某條物理表記錄在Hologres邏輯表里的唯一性,全量數(shù)據(jù)遷移以及實(shí)時(shí)增量數(shù)據(jù)寫入時(shí)均需要對(duì)這三個(gè)附加字段賦值。
需求匯總:
數(shù)據(jù):將MySQL全量數(shù)據(jù)一次性同步至Hologres,增量數(shù)據(jù)后續(xù)實(shí)時(shí)寫入目標(biāo)端。
表:將源端分表數(shù)據(jù)寫入目標(biāo)單表,并為寫入的Hologres表添加統(tǒng)一前綴。
將分表數(shù)據(jù)寫入目標(biāo)單表:將源表滿足
t_order.*
正則表達(dá)式的表數(shù)據(jù)寫入到Hologres名為t_order
的表中,所有滿足t_user.*
正則表達(dá)式的表數(shù)據(jù)寫入到Hologres名為t_user
的表中。為表加上統(tǒng)一前綴:在目標(biāo)名前統(tǒng)一加上
cdo_
前綴。
schema:需要將源端所有滿足
order_db.*
正則表達(dá)式的庫寫入目標(biāo)Hologres名為order_db
的schema中。字段:目標(biāo)表在原有表結(jié)構(gòu)基礎(chǔ)上,增加src_datasource、src_database、src_table字段用于記錄源端表數(shù)據(jù)來源。
綜合如上分析結(jié)果,最終的表對(duì)應(yīng)關(guān)系如下所示:
源端分庫
源端待同步表
寫入的目標(biāo)表
目標(biāo)表新增字段
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
操作流程
步驟一:選擇同步方案
創(chuàng)建同步解決方案任務(wù),選擇需要同步的源端數(shù)據(jù)源MySQL,目標(biāo)端數(shù)據(jù)源Hologres,并選擇一鍵實(shí)時(shí)同步至Hologres方案。
步驟二:配置網(wǎng)絡(luò)連通
源端選擇已創(chuàng)建的數(shù)據(jù)源doc_mysql1
,目標(biāo)數(shù)據(jù)源為DataWorks工作空間創(chuàng)建的Hologres數(shù)據(jù)源。并測(cè)試連通性。
步驟三:設(shè)置同步來源與規(guī)則
在基本配置區(qū)域,配置同步解決方案的名稱、任務(wù)存放位置等信息。
在數(shù)據(jù)來源區(qū)域,確認(rèn)需要同步的源端數(shù)據(jù)源相關(guān)信息。
在選擇同步的源表區(qū)域,選中需要同步的源表,單擊圖標(biāo),將其移動(dòng)至已選源表。
該區(qū)域會(huì)為您展示所選數(shù)據(jù)源下所有的表,您可以選擇整庫全表或部分表進(jìn)行同步。
在設(shè)置表(庫)名的映射規(guī)則區(qū)域,單擊添加規(guī)則,選擇相應(yīng)的規(guī)則進(jìn)行添加。
同步時(shí)默認(rèn)將源端數(shù)據(jù)表寫入目的端同名schema或同名表中,同時(shí),您可以通過添加映射規(guī)則定義最終寫入目的端的schema或表名稱,實(shí)現(xiàn)將多張表數(shù)據(jù)寫入到同一個(gè)目標(biāo)表中,或統(tǒng)一將源端某固定前綴的表名在寫入目標(biāo)表時(shí)更新為其他前綴。支持通過正則表達(dá)式轉(zhuǎn)換寫入的schema名或表名,還支持使用內(nèi)置變量拼接目標(biāo)表名。配置邏輯請(qǐng)參見:設(shè)置同步來源與規(guī)則。
在本實(shí)踐中,我們需要將MySQL數(shù)據(jù)庫中的12張分庫分表寫入對(duì)應(yīng)的兩張Hologres表中。設(shè)置表(庫)名映射規(guī)則如下:
源表名和目標(biāo)表名轉(zhuǎn)換規(guī)則:支持將源表名通過正則表達(dá)式轉(zhuǎn)換為目標(biāo)表名。
如上圖所示設(shè)置源為要搜索的字符串
t_order.*
,將源表所有滿足t_order.*
正則表達(dá)式的表數(shù)據(jù)寫入到Hologres名為t_order
表中;所有滿足t_user.*
正則表達(dá)式的源表寫入到Hologres名為t_user
表中。目標(biāo)表名規(guī)則:支持您使用內(nèi)置的變量組合生成目標(biāo)表名,同時(shí),對(duì)轉(zhuǎn)換后的目標(biāo)表名支持添加前綴和后綴。如上圖所示為源表名和目標(biāo)表名轉(zhuǎn)換規(guī)則轉(zhuǎn)換后的表名前統(tǒng)一加上
cdo_
前綴。源表名和目標(biāo)Schema名轉(zhuǎn)換規(guī)則:若要將多個(gè)物理庫實(shí)時(shí)寫入一個(gè)目標(biāo)Schema中,您需要將物理庫和目標(biāo)schema進(jìn)行轉(zhuǎn)換(默認(rèn)源庫寫入目標(biāo)同名schema)。如上圖所示將所有滿足
order_db.*
正則表達(dá)式的源庫寫入目標(biāo)Hologres名為order_db
的schema中。
步驟四:設(shè)置目標(biāo)表
確認(rèn)寫入Hologres的策略。
寫入Hologres策略目前僅支持重放,重放表示鏡像功能,即源端INSERT一條記錄,Hologres中也INSERT一條記錄;源端執(zhí)行UPDATE或DELETE操作,Hologres中也進(jìn)行UPDATE或DELETE。
刷新源表和Hologres表映射。
單擊刷新源表和Hologres表映射,將根據(jù)您在步驟三配置的目標(biāo)表映射規(guī)則來生成目標(biāo)表,若步驟三未配置映射規(guī)則,將默認(rèn)寫入與源表同名的目標(biāo)表,若目標(biāo)端不存在該同名表,將默認(rèn)新建。同時(shí),您可以修改表建立方式、為目標(biāo)表在源有表字段基礎(chǔ)上增加附加字段。
該步驟數(shù)據(jù)集成會(huì)自動(dòng)拉取要同步的源表表結(jié)構(gòu),并按照表(庫)名轉(zhuǎn)換規(guī)則將其自動(dòng)映射到目標(biāo)Hologres表。單擊刷新源表和Hologres表映射,結(jié)果如下:
批量添加附加字段。
為了更好的區(qū)分上游表的來源,需要為目標(biāo)表添加附加字段。
勾選所有的任務(wù),并單擊批量編輯目標(biāo)表附加字段。
說明僅在表建立方式為自動(dòng)建表時(shí),可以使用此功能。
在批量編輯目標(biāo)表附加字段彈窗,單擊新增字段,新增src_datasource、src_database和src_table三個(gè)字段。并為字段賦值。
說明數(shù)據(jù)集成附加字段支持的變量字段如下:
EXECUTE_TIME:執(zhí)行時(shí)間 UPDATE_TIME:更新時(shí)間 DB_NAME_SRC:原始數(shù)據(jù)庫名稱 DB_NAME_SRC_TRANSED:轉(zhuǎn)換后數(shù)據(jù)庫名稱 DATASOURCE_NAME_SRC:源端數(shù)據(jù)源名稱 DATASOURCE_NAME_DEST:目的端數(shù)據(jù)源名稱 DB_NAME_DEST:目的端數(shù)據(jù)庫名稱 TABLE_NAME_DEST:目的端表名稱 TABLE_NAME_SRC:源端表名稱
步驟五:設(shè)置表粒度同步規(guī)則
即當(dāng)源表發(fā)生插入、更新、刪除時(shí),您可以在此處定義對(duì)應(yīng)的處理策略。
正常處理:源端DML消息將會(huì)繼續(xù)下發(fā)給目標(biāo)數(shù)據(jù)源,由目標(biāo)數(shù)據(jù)源來處理。
忽略:直接丟棄該消息,不再向目標(biāo)數(shù)據(jù)源發(fā)送對(duì)應(yīng)的DML消息,對(duì)應(yīng)數(shù)據(jù)不會(huì)改變。
有條件的正常處理:選擇后,您可以配置過濾條件,同步任務(wù)將按照您配置的過濾表達(dá)式對(duì)源端數(shù)據(jù)進(jìn)行過濾,滿足過濾條件的數(shù)據(jù)會(huì)被正常處理,不滿足的會(huì)被忽略掉。
若不設(shè)置,則默認(rèn)為“正常處理”。
步驟六:DDL消息處理規(guī)則
來源數(shù)據(jù)源會(huì)包含許多DDL操作,數(shù)據(jù)集成體提供默認(rèn)處理策略,您也可以根據(jù)業(yè)務(wù)需求,對(duì)不同的DDL消息設(shè)置同步至目標(biāo)端的處理策略。不同DDL消息處理策略請(qǐng)參見:DDL消息處理規(guī)則。
步驟七:運(yùn)行資源設(shè)置
當(dāng)前方案創(chuàng)建后將分別生成全量數(shù)據(jù)離線同步子任務(wù)和增量數(shù)據(jù)實(shí)時(shí)同步子任務(wù)。您需要在運(yùn)行資源設(shè)置界面配置離線同步任務(wù)和實(shí)時(shí)同步任務(wù)的相關(guān)屬性。
包括實(shí)時(shí)增量同步及離線全量同步使用的獨(dú)享數(shù)據(jù)集成資源組,同時(shí),單擊高級(jí)配置可配置是否容忍臟數(shù)據(jù)、任務(wù)最大并發(fā)數(shù)、源庫允許支持的最大連接數(shù)等參數(shù)。
DataWorks的離線同步任務(wù)通過調(diào)度資源組將其下發(fā)到數(shù)據(jù)集成任務(wù)執(zhí)行資源組上執(zhí)行,所以離線同步任務(wù)除了涉及數(shù)據(jù)集成任務(wù)執(zhí)行資源組外,還會(huì)占用調(diào)度資源組資源。如果使用了獨(dú)享調(diào)度資源組,將會(huì)產(chǎn)生調(diào)度實(shí)例費(fèi)用。您可通過任務(wù)下發(fā)機(jī)制對(duì)該機(jī)制進(jìn)行了解。
離線和實(shí)時(shí)同步任務(wù)推薦使用不同的資源組,以便任務(wù)分開執(zhí)行。如果選擇同一個(gè)資源組,任務(wù)混跑會(huì)帶來資源搶占、運(yùn)行態(tài)互相影響等問題。例如,CPU、內(nèi)存、網(wǎng)絡(luò)等互相影響,可能會(huì)導(dǎo)致離線任務(wù)變慢或?qū)崟r(shí)任務(wù)延遲等問題,甚至在資源不足的極端情況下,可能會(huì)出現(xiàn)任務(wù)被OOM KILLER殺掉等問題。
步驟八:執(zhí)行同步任務(wù)
進(jìn)入 界面,找到已創(chuàng)建的同步方案。
單擊操作列的提交執(zhí)行按鈕,啟動(dòng)同步的運(yùn)行。
單擊操作列的執(zhí)行詳情,查看任務(wù)的詳細(xì)執(zhí)行過程。
后續(xù)步驟
完成任務(wù)配置后,您可以對(duì)已創(chuàng)建的任務(wù)進(jìn)行管理、執(zhí)行加減表操作,或?qū)θ蝿?wù)配置監(jiān)控報(bào)警,并查看任務(wù)運(yùn)行的關(guān)鍵指標(biāo)等。詳情請(qǐng)參見:全增量同步任務(wù)運(yùn)維。