通過DTS將數(shù)據(jù)庫數(shù)據(jù)同步到阿里云ES Serverless
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
如果您需要將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)實時同步到阿里云Elasticsearch Serverless(簡稱ES Serverless)中進行搜索分析,可通過數(shù)據(jù)傳輸服務(wù)DTS快速創(chuàng)建源庫到目標庫ES Serverless的實時同步作業(yè),適用于對實時同步要求較高的同步場景。本文以源庫為RDS MySQL為例,介紹全量和增量同步數(shù)據(jù)到ES Serverless的方法。
前提條件
源數(shù)據(jù)庫支持的數(shù)據(jù)庫類型:
MySQL:源庫限制,請參見RDS MySQL同步至Elasticsearch。
PolarDB for MySQL:源庫限制,請參見PolarDB MySQL版同步至Elasticsearch。
PolarDB-X 1.0:源庫限制,請參見PolarDB-X 1.0同步至Elasticsearch。
PolarDB-X 2.0:源庫限制,請參見PolarDB-X 2.0同步至Elasticsearch。
背景信息
數(shù)據(jù)傳輸服務(wù)DTS是一種集數(shù)據(jù)遷移、數(shù)據(jù)訂閱及數(shù)據(jù)實時同步于一體的數(shù)據(jù)傳輸服務(wù),詳細信息請參見數(shù)據(jù)傳輸服務(wù)DTS。DTS支持同步的SQL操作包括Insert、Delete和Update,支持同步的數(shù)據(jù)源版本要求請參見同步方案概覽。
說明支持同步到ES Serverless的源庫包括MySQL、PolarDB for MySQL、PolarDB-X 1.0、PolarDB-X 2.0。
通過在DTS中配置從源(MySQL)同步到目標(ES Serverless),可實現(xiàn)全量、增量數(shù)據(jù)同步。適用于對實時同步要求較高的關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的同步場景或需要將關(guān)系型數(shù)據(jù)庫中的全量或增量數(shù)據(jù)同步到ES Serverless的場景。
注意事項
同步入門版應(yīng)用的數(shù)據(jù)需要您自行控制DTS數(shù)據(jù)同步速率,否則可能出現(xiàn)同步任務(wù)執(zhí)行失敗的情況。
DTS不支持同步DDL操作,如果源庫中待同步的表在同步的過程中已經(jīng)執(zhí)行了DDL操作,您需要先移除同步對象,然后在ES Serverless應(yīng)用中移除該表對應(yīng)的索引,最后新增同步對象。詳情請參見移除同步對象和新增同步對象。
如果源庫中待同步的表需要執(zhí)行增加列的操作,您只需先在Serverless應(yīng)用中修改對應(yīng)表的mapping,然后在源庫中執(zhí)行相應(yīng)的DDL操作,最后暫停并啟動DTS增量數(shù)據(jù)同步任務(wù)。
DTS在執(zhí)行全量數(shù)據(jù)初始化時將占用源庫和目標庫一定的讀寫資源,可能會導(dǎo)致數(shù)據(jù)庫的負載上升,在數(shù)據(jù)庫性能較差、規(guī)格較低或業(yè)務(wù)量較大的情況下(例如源庫有大量慢SQL、存在無主鍵表或目標庫存在死鎖等),可能會加重數(shù)據(jù)庫壓力,甚至導(dǎo)致數(shù)據(jù)庫服務(wù)不可用。因此您需要在執(zhí)行數(shù)據(jù)同步前評估源庫和目標庫的性能,同時建議您在業(yè)務(wù)低峰期執(zhí)行數(shù)據(jù)同步(例如源庫和目標庫的CPU負載在30%以下)。
在業(yè)務(wù)高峰期全量同步數(shù)據(jù),可能造成全量數(shù)據(jù)同步失敗,重啟全量同步任務(wù)即可。
在業(yè)務(wù)高峰期增量同步數(shù)據(jù),可能出現(xiàn)數(shù)據(jù)同步延遲的情況。
操作步驟
步驟一:準備待同步數(shù)據(jù)
文本以將RDS MySQL 8.0版本實例中的數(shù)據(jù)同步到阿里云ES Serverless應(yīng)用中為例。
創(chuàng)建RDS MySQL 8.0版本實例。具體操作,請參見創(chuàng)建RDS MySQL實例。
創(chuàng)建賬號和數(shù)據(jù)庫
test_mysql
。具體操作,請參見創(chuàng)建數(shù)據(jù)庫和賬號。在數(shù)據(jù)庫
test_mysql
中,新建表es_test
并插入數(shù)據(jù)。使用的建表語句及數(shù)據(jù)如下:-- create table CREATE TABLE `es_test` ( `id` bigint(32) NOT NULL, `name` varchar(32) NULL, `age` bigint(32) NULL, `hobby` varchar(32) NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; -- insert data INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (1,'user1',22,'music'); INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (2,'user2',23,'sport'); INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (3,'user3',43,'game'); INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (4,'user4',24,'run'); INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (5,'user5',42,'basketball');
步驟二:創(chuàng)建同步任務(wù)
進入創(chuàng)建同步任務(wù)頁面。
在頂部菜單欄,選擇目標應(yīng)用所在地域。
在左側(cè)導(dǎo)航欄,單擊應(yīng)用管理。
在應(yīng)用管理頁面,在應(yīng)用列表中單擊應(yīng)用名稱。
在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)遷移與同步。
單擊前往同步。
在數(shù)據(jù)同步頁簽,單擊創(chuàng)建同步任務(wù)。
在配置源庫及目標庫向?qū)ы撁妫渲迷磶旒澳繕藥臁?/p>
重要參數(shù)說明如下:
項目
參數(shù)
描述
源庫信息
數(shù)據(jù)庫類型
選擇源數(shù)據(jù)庫的數(shù)據(jù)庫類型。
接入方式
接入方式支持:
云實例
專線/VPN網(wǎng)關(guān)/智能網(wǎng)關(guān)
ECS自建數(shù)據(jù)庫
云企業(yè)網(wǎng)CEN
數(shù)據(jù)庫網(wǎng)關(guān)DG
如果您的源數(shù)據(jù)庫為RDS MySQL,接入方式選擇云實例。
實例地區(qū)
選擇源RDS MySQL實例所在地域。
RDS實例ID
選擇源RDS MySQL實例。
數(shù)據(jù)庫賬號
填入源RDS MySQL實例的數(shù)據(jù)庫賬號。
數(shù)據(jù)庫密碼
填入數(shù)據(jù)庫賬號對應(yīng)的密碼。
連接方式
根據(jù)需求選擇非加密連接或SSL安全連接。如果設(shè)置為SSL安全連接,您需要提前開啟RDS MySQL實例的SSL加密功能,詳情請參見使用云端證書快速開啟SSL鏈路加密。
目標庫信息
數(shù)據(jù)庫賬號
Serverless應(yīng)用的用戶名,在應(yīng)用詳情頁面的基本信息區(qū)域查看、復(fù)制。
數(shù)據(jù)庫密碼
Serverless應(yīng)用的用戶密碼,創(chuàng)建應(yīng)用時輸入的密碼。如果您忘記了密碼,可以在應(yīng)用詳情頁面的基本信息區(qū)域,單擊用戶密碼后的修改,修改應(yīng)用密碼。
單擊測試連接以進行下一步,在對象配置向?qū)ы撁妫?span data-tag="cmd" id="cmd-n4c-hht-cu1" class="cmd">配置任務(wù)對象及高級配置。
配置
說明
同步類型
固定選中增量同步。默認情況下,您還需要同時選中庫表結(jié)構(gòu)同步和全量同步。預(yù)檢查完成后,DTS會將源實例中待同步對象的全量數(shù)據(jù)在目標集群中初始化,作為后續(xù)增量同步數(shù)據(jù)的基線數(shù)據(jù)。
索引名稱
表名:在目標ES Serverless應(yīng)用中創(chuàng)建的索引名稱和表名一致。
庫名_表名:在目標ES Serverless應(yīng)用中創(chuàng)建的索引名稱由庫名、下劃線(_)和表名按順序拼接而成。
說明索引名稱映射配置會在所有表中生效。
目標已存在表的處理模式
預(yù)檢查并報錯攔截:檢查目標數(shù)據(jù)庫中是否有同名的表。如果目標數(shù)據(jù)庫中沒有同名的表,則通過該檢查項目;如果目標數(shù)據(jù)庫中有同名的表,則在預(yù)檢查階段提示錯誤,數(shù)據(jù)同步任務(wù)不會被啟動。
說明如果目標庫中同名的表不方便刪除或重命名,您可以更改該表在目標庫中的名稱,請參見庫表列名映射。
忽略報錯并繼續(xù)執(zhí)行:跳過目標數(shù)據(jù)庫中是否有同名表的檢查項。
警告選擇為忽略報錯并繼續(xù)執(zhí)行,可能導(dǎo)致數(shù)據(jù)不一致,給業(yè)務(wù)帶來風(fēng)險,例如:
表結(jié)構(gòu)一致的情況下,如在目標庫遇到與源庫主鍵或唯一鍵的值相同的記錄:
全量期間,DTS會保留目標集群中的該條記錄,即源庫中的該條記錄不會同步至目標數(shù)據(jù)庫中。
增量期間,DTS不會保留目標集群中的該條記錄,即源庫中的該條記錄會覆蓋至目標數(shù)據(jù)庫中。
表結(jié)構(gòu)不一致的情況下,可能會導(dǎo)致無法初始化數(shù)據(jù)、只能同步部分列的數(shù)據(jù)或同步失敗,請謹慎操作。
目標庫對象名稱大小寫策略
您可以配置目標實例中同步對象的庫名、表名和列名的英文大小寫策略。默認情況下選擇DTS默認策略,您也可以選擇與源庫、目標庫默認策略保持一致。更多信息,請參見目標庫對象名稱大小寫策略。
源庫對象
在源庫對象框中單擊待同步對象,然后單擊將其移動至已選擇對象框。
說明同步對象選擇的粒度為庫、表。若選擇的同步對象為表,其他對象(如視圖、觸發(fā)器、存儲過程)不會被同步至目標庫。
已選擇對象
如果您需要修改同步后的字段名稱,可在已選擇對象區(qū)域框中,右鍵單擊對應(yīng)的表名,設(shè)置該表在目標ES Serverless中的索引名稱、Type名稱等信息,然后單擊確定。更多信息,請參見庫表列名單個映射。
說明您可以設(shè)置SQL過濾條件,過濾待同步的數(shù)據(jù),只有滿足過濾條件的數(shù)據(jù)才會被同步到目標實例,詳情請參見通過SQL條件過濾任務(wù)數(shù)據(jù)。
單擊高級配置,展開高級配置項進行高級配置。參數(shù)說明,請參見高級配置。
單擊下一步配置庫表字段,在配置庫表字段向?qū)ы撁妫渲脦毂碜侄巍?/p>
單擊全部設(shè)置為非_routing策略,在彈出的對話框中單擊確認,表示用_id進行路由。關(guān)于_routing的更多信息,請參見_routing。
單擊下一步保存任務(wù)并預(yù)檢查。
說明在同步作業(yè)正式啟動之前,會先進行預(yù)檢查。只有預(yù)檢查通過后,才能成功啟動同步作業(yè)。
如果預(yù)檢查失敗,請單擊失敗檢查項后的查看詳情,并根據(jù)提示修復(fù)后重新進行預(yù)檢查。
如果預(yù)檢查產(chǎn)生警告:
對于不可以忽略的檢查項,請單擊失敗檢查項后的查看詳情,并根據(jù)提示修復(fù)后重新進行預(yù)檢查。
對于可以忽略無需修復(fù)的檢查項,您可以依次單擊點擊確認告警詳情、確認屏蔽、確定、重新進行預(yù)檢查,跳過告警檢查項重新進行預(yù)檢查。如果選擇屏蔽告警檢查項,可能會導(dǎo)致數(shù)據(jù)不一致等問題,給業(yè)務(wù)帶來風(fēng)險。
單擊下一步購買,在購買頁面,選擇數(shù)據(jù)同步實例的計費方式、鏈路規(guī)格。
類別
參數(shù)
說明
信息配置
計費方式
預(yù)付費(包年包月):在新建實例時支付費用。適合長期需求,價格比按量付費更實惠,且購買時長越長,折扣越多。
后付費(按量付費):按小時扣費。適合短期需求,用完可立即釋放實例,節(jié)省費用。
資源組配置
實例所屬的資源組,默認為default resource group。更多信息,請參見什么是資源管理。
鏈路規(guī)格
DTS為您提供了不同性能的同步規(guī)格,同步鏈路規(guī)格的不同會影響同步速率,您可以根據(jù)業(yè)務(wù)場景進行選擇。更多信息,請參見數(shù)據(jù)同步鏈路規(guī)格說明。
訂購時長
在預(yù)付費模式下,選擇包年包月實例的時長和數(shù)量,包月可選擇1~9個月,包年可選擇1年、2年、3年和5年。
說明該選項僅在付費類型為預(yù)付費時出現(xiàn)。
配置完成后,閱讀并勾選《數(shù)據(jù)傳輸(按量付費)服務(wù)條款》。
單擊購買并啟動,同步任務(wù)正式開始,您可在數(shù)據(jù)同步界面查看具體任務(wù)進度。
步驟三:驗證數(shù)據(jù)同步結(jié)果
登錄目標ES Serverless應(yīng)用的Kibana控制臺。
登錄Kibana控制臺,請參見通過Kibana使用Serverless應(yīng)用。
在Kibana頁面的左上角,選擇
在Console中,執(zhí)行如下命令查看全量數(shù)據(jù)同步結(jié)果。
GET /es_test/_search
說明es_test
需要替換為同步后的索引名稱。預(yù)期結(jié)果如下:
{ "took" : 3, "timed_out" : false, "_shards" : { "total" : 12, "successful" : 12, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "es_test", "_type" : "es_test", "_id" : "5", "_score" : 1.0, "_source" : { "id" : 5, "name" : "user5", "age" : 42, "hobby" : "basketball" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "2", "_score" : 1.0, "_source" : { "id" : 2, "name" : "user2", "age" : 23, "hobby" : "sport" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "3", "_score" : 1.0, "_source" : { "id" : 3, "name" : "user3", "age" : 43, "hobby" : "game" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "4", "_score" : 1.0, "_source" : { "id" : 4, "name" : "user4", "age" : 24, "hobby" : "run" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "1", "_score" : 1.0, "_source" : { "id" : 1, "name" : "user1", "age" : 22, "hobby" : "music" } } ] } }
在RDS MySQL中插入一條數(shù)據(jù),在Serverless應(yīng)用中查看增量數(shù)據(jù)同步結(jié)果。
例如,通過以下SQL語句在RDS MySQL中插入一條數(shù)據(jù)。
INSERT INTO `test_mysql`.`es_test` (`id`,`name`,`age`,`hobby`) VALUES (6,'user6',30,'dance');
預(yù)期結(jié)果如下:
{ "took" : 8, "timed_out" : false, "_shards" : { "total" : 12, "successful" : 12, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 6, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "es_test", "_type" : "es_test", "_id" : "5", "_score" : 1.0, "_source" : { "id" : 5, "name" : "user5", "age" : 42, "hobby" : "basketball" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "2", "_score" : 1.0, "_source" : { "id" : 2, "name" : "user2", "age" : 23, "hobby" : "sport" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "3", "_score" : 1.0, "_source" : { "id" : 3, "name" : "user3", "age" : 43, "hobby" : "game" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "4", "_score" : 1.0, "_source" : { "id" : 4, "name" : "user4", "age" : 24, "hobby" : "run" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "1", "_score" : 1.0, "_source" : { "id" : 1, "name" : "user1", "age" : 22, "hobby" : "music" } }, { "_index" : "es_test", "_type" : "es_test", "_id" : "6", "_score" : 1.0, "_source" : { "name" : "user6", "id" : 6, "age" : 30, "hobby" : "dance" } } ] } }
相關(guān)文檔
您還可以參考以下文檔進行數(shù)據(jù)同步: