290
阿裏雲
觸發器存在情況下如何配置同步作業__最佳實踐_數據傳輸-阿裏雲
數據傳輸服務提供的實時同步功能不能很好得兼容觸發器。當同步對象為整個庫且這個庫中包含了會更新同步表內容的觸發器,那麼可能導致同步數據不一致。
例如同步庫為jiangliu_trigger_test,這個庫中存在了兩個表parent, child。parent上有一個觸發器,是指在insert一條數據到parent後,在child中插入一條數據。這種情況下,同步初始化會將這兩個表及觸發器遷移到目標實例,在同步過程中,如果源實例有parent上的insert操作,就會導致child表在源實例跟目標實例數據不一致。
假設表parent定義如下:
CREATE TABLE `parent` (
`user_vs_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
PRIMARY KEY (`user_vs_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=utf8
child 定義如下:
CREATE TABLE `child` (
`sys_child_id` int(11) NOT NULL AUTO_INCREMENT,
`user_vs_id` int(11) DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
PRIMARY KEY (`sys_child_id`)
parent上的觸發器如下:
CREATE DEFINER= `dts`@`%` trigger data_check after
insert on parent for each row begin
insert into child(user_vs_id, name) values(new.user_vs_id, new.name) ;end
為了解決這個問題,隻能將目標實例中的觸發器data_check刪除掉。child表的數據由源實例同步過去。本小節簡單介紹如果存在這種觸發器的情況下,如何配置同步鏈路能夠避免數據不一致問題。
下麵簡單介紹在這種觸發器存在情況下,同步鏈路的配置步驟。
結構遷移
首先在數據傳輸服務控製台,創建一個隻進行結構遷移的遷移任務,將需要同步對象的結構對象都遷移到目標庫。具體步驟如下:
登錄數據傳輸DTS控製台。
登錄數據傳輸DTS控製台,點擊右上角“創建在線遷移任務” 創建結構遷移任務。
實例連接信息配置。
在這個步驟中,主要配置遷移任務名稱,遷移源實例及目標實例連接信息。其中:
源實例類型選擇RDS實例,目標實例類型選擇RDS實例。
遷移類型及遷移對象選擇。
在這個步驟中遷移類型隻能選擇結構遷移,不能選擇全量數據遷移及增量數據遷移。因為我們隻是為了將結構遷移到目標RDS實例中。
預檢查。
當預檢查完成後,啟動遷移任務,開始結構對象的遷移。
刪除目標實例的觸發器
當結構遷移完成後,到目標RDS實例上,將結構遷移任務遷移過來的觸發器手動刪除掉,執行SQL如下:
show triggers;
drop trigger data_check;
其中data_check 為需要刪除的觸發器。
創建同步鏈路
當目標實例中的觸發器刪除掉之後,可以開始創建同步鏈路。
因為結構已經遷移過去了,所以同步初始化隻選擇全量數據初始化。
同步鏈路配置流程如下:
進入數據同步界麵,點擊右上角“創建同步作業” 購買同步鏈路。鏈路購買完成後,返回DTS控製台,點擊鏈路右側的 配置同步鏈路,開始鏈路配置。
配置實例信息。
在這個步驟中,主要配置遷移任務名稱,遷移源實例及目標實例連接信息。其中:
任務名稱
默認情況下,DTS為每個任務自動生成一個任務名稱。任務名稱沒有唯一性要求,您可以修改這個名稱,為任務配置一個具有業務意義的名稱,便於後續的任務識別。
源實例連接信息
- 實例類型:選擇 RDS實例
- RDS實例ID:配置RDS實例的實例ID
- 數據庫賬號:RDS實例訪問賬號
- 數據庫密碼:上麵RDS訪問賬號對應的密碼
目標實例連接信息
- 實例類型:選擇 RDS實例
- RDS實例ID:配置RDS實例的實例ID
- 數據庫賬號:RDS實例訪問賬號
- 數據庫密碼:上麵RDS訪問賬號對應的密碼
選擇同步對象。
這一步選擇同步對象,這裏選擇的同步對象同上麵結構遷移的對象一定要一致。
同步初始化。
注意,這裏麵同步初始化隻勾選全量數據初始化,不進行結構初始化,因為上麵的結構遷移已經將同步對象的結構定義遷移到目標RDS實例了。
預檢查。
當預檢查成功後即可啟動同步任務。
至此完成整個同步鏈路的配置。
數據一致性校驗
在源庫的parent表中插入一條記錄。
insert into parent values(1,'jiangliu');
校驗源跟目標的child表是否數據一致。
在源及目標實例中分別查詢child表的數據。
select * from child;
源庫及目標庫結果如下:
源庫:
目標庫:
由此可見,同步數據一致。
最後更新:2016-11-23 16:03:55
上一篇:
公共雲與金融雲間的數據遷移__最佳實踐_數據傳輸-阿裏雲
下一篇:
數據訂閱SDK容災__最佳實踐_數據傳輸-阿裏雲
忘記密碼怎麼辦,如何找回密碼__賬號登錄_會員帳號及密碼_會員賬號&實名認證-阿裏雲
釋放RDS實例__實例管理_API 參考_雲數據庫 RDS 版-阿裏雲
雲服務器 ECS 有兩種計費模式
創建自定義授權策略__快速入門_訪問控製-阿裏雲
PutBucketLogging__關於Bucket的操作_API 參考_對象存儲 OSS-阿裏雲
態勢感知9月功能更新__產品升級更新_態勢感知-阿裏雲
業務數據分析__快速開始_移動數據分析-阿裏雲
簡單深度學習離線訓練__應用場景_產品簡介_高性能計算-阿裏雲
查詢流控記錄__JAVA SDK_SDK 手冊_CDN-阿裏雲
LogHub數據源__準備數據源_用戶指南_業務實時監控服務 ARMS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲