閱讀290 返回首頁    go 阿裏雲


觸發器存在情況下如何配置同步作業__最佳實踐_數據傳輸-阿裏雲

數據傳輸服務提供的實時同步功能不能很好得兼容觸發器。當同步對象為整個庫且這個庫中包含了會更新同步表內容的觸發器,那麼可能導致同步數據不一致。

例如同步庫為jiangliu_trigger_test,這個庫中存在了兩個表parent, child。parent上有一個觸發器,是指在insert一條數據到parent後,在child中插入一條數據。這種情況下,同步初始化會將這兩個表及觸發器遷移到目標實例,在同步過程中,如果源實例有parent上的insert操作,就會導致child表在源實例跟目標實例數據不一致。

假設表parent定義如下:

  1. CREATE TABLE `parent` (
  2. `user_vs_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(30) DEFAULT NULL,
  4. PRIMARY KEY (`user_vs_id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=utf8

child 定義如下:

  1. CREATE TABLE `child` (
  2. `sys_child_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_vs_id` int(11) DEFAULT NULL,
  4. `name` varchar(30) DEFAULT NULL,
  5. PRIMARY KEY (`sys_child_id`)

parent上的觸發器如下:

  1. CREATE DEFINER= `dts`@`%` trigger data_check after
  2. insert on parent for each row begin
  3. insert into child(user_vs_id, name) values(new.user_vs_id, new.name) ;end

為了解決這個問題,隻能將目標實例中的觸發器data_check刪除掉。child表的數據由源實例同步過去。本小節簡單介紹如果存在這種觸發器的情況下,如何配置同步鏈路能夠避免數據不一致問題。

下麵簡單介紹在這種觸發器存在情況下,同步鏈路的配置步驟。

結構遷移

首先在數據傳輸服務控製台,創建一個隻進行結構遷移的遷移任務,將需要同步對象的結構對象都遷移到目標庫。具體步驟如下:

  1. 登錄數據傳輸DTS控製台。

    登錄數據傳輸DTS控製台,點擊右上角“創建在線遷移任務” 創建結構遷移任務。

  2. 實例連接信息配置。

    在這個步驟中,主要配置遷移任務名稱,遷移源實例及目標實例連接信息。其中:

    源實例類型選擇RDS實例,目標實例類型選擇RDS實例。

  3. 遷移類型及遷移對象選擇。

    在這個步驟中遷移類型隻能選擇結構遷移,不能選擇全量數據遷移及增量數據遷移。因為我們隻是為了將結構遷移到目標RDS實例中。

    遷移類型選擇

  4. 預檢查。

    當預檢查完成後,啟動遷移任務,開始結構對象的遷移。

刪除目標實例的觸發器

當結構遷移完成後,到目標RDS實例上,將結構遷移任務遷移過來的觸發器手動刪除掉,執行SQL如下:

  1. show triggers;
  2. drop trigger data_check;

其中data_check 為需要刪除的觸發器。

創建同步鏈路

當目標實例中的觸發器刪除掉之後,可以開始創建同步鏈路。

因為結構已經遷移過去了,所以同步初始化隻選擇全量數據初始化。

同步鏈路配置流程如下:

進入數據同步界麵,點擊右上角“創建同步作業” 購買同步鏈路。鏈路購買完成後,返回DTS控製台,點擊鏈路右側的 配置同步鏈路,開始鏈路配置。

  1. 配置實例信息。

    在這個步驟中,主要配置遷移任務名稱,遷移源實例及目標實例連接信息。其中:

    • 任務名稱

      默認情況下,DTS為每個任務自動生成一個任務名稱。任務名稱沒有唯一性要求,您可以修改這個名稱,為任務配置一個具有業務意義的名稱,便於後續的任務識別。

    • 源實例連接信息

      • 實例類型:選擇 RDS實例
      • RDS實例ID:配置RDS實例的實例ID
      • 數據庫賬號:RDS實例訪問賬號
      • 數據庫密碼:上麵RDS訪問賬號對應的密碼
    • 目標實例連接信息

      • 實例類型:選擇 RDS實例
      • RDS實例ID:配置RDS實例的實例ID
      • 數據庫賬號:RDS實例訪問賬號
      • 數據庫密碼:上麵RDS訪問賬號對應的密碼
  2. 選擇同步對象。

    這一步選擇同步對象,這裏選擇的同步對象同上麵結構遷移的對象一定要一致。

  3. 同步初始化。

    同步初始化配置

    注意,這裏麵同步初始化隻勾選全量數據初始化,不進行結構初始化,因為上麵的結構遷移已經將同步對象的結構定義遷移到目標RDS實例了。

  4. 預檢查。

    當預檢查成功後即可啟動同步任務。

    至此完成整個同步鏈路的配置。

數據一致性校驗

  1. 在源庫的parent表中插入一條記錄。

    1. insert into parent values(1,'jiangliu');
  2. 校驗源跟目標的child表是否數據一致。

    在源及目標實例中分別查詢child表的數據。

    1. select * from child;

    源庫及目標庫結果如下:

    • 源庫:

      源庫

    • 目標庫:

      目的庫

      由此可見,同步數據一致。

最後更新:2016-11-23 16:03:55

  上一篇:go 公共雲與金融雲間的數據遷移__最佳實踐_數據傳輸-阿裏雲
  下一篇:go 數據訂閱SDK容災__最佳實踐_數據傳輸-阿裏雲