全部產品
Search
文件中心

Data Transmission Service:源庫存在觸發器時如何配置同步或遷移作業

更新時間:Aug 08, 2024

當您同步執行個體的對象為整庫,且該資料庫中包含了會更新庫內某個表的觸發器(Trigger)時,可能會導致源庫和目標庫的資料不一致。本文介紹源庫存在觸發器的情況下如何正確地配置同步作業,以確保資料的一致性和完整性。

背景資訊

若同步或遷移執行個體的源庫包含觸發器且執行個體滿足以下條件,請參考相關文檔同步或遷移觸發器,以確保源庫和目標庫的資料一致性。其他包含觸發器的同步或遷移執行個體,請參考本文進行操作。

源庫

目標庫

說明

相關文檔

無限制

PostgreSQL、PolarDB PostgreSQL版PolarDB PostgreSQL版(相容Oracle)

  • 若執行個體使用的目標庫帳號有足夠的許可權(高許可權帳號或者super許可權帳號),觸發器同步或遷移到目標庫後,DTS會以Session層級自動禁用該觸發器。

  • 若執行個體使用的目標庫帳號許可權不足,您需要確保在執行個體運行期間目標資料庫中session_replication_role的參數值為replica

MySQL、PolarDB MySQL版、MariaDB

MySQL、PolarDB MySQL版、MariaDB

支援手動設定同步或遷移觸發器的方式。

配置同步或遷移觸發器的方式

SQL Server

SQL Server

實現流程

  1. 建立源庫到目標資料庫的遷移執行個體

    相關配置文檔,請參見遷移方案概覽

    重要
    • 遷移類型只需勾選庫表結構遷移

    • 源庫對象中選擇的粒度為資料庫或Schema。

  2. 登入目標資料庫,刪除從來源資料庫遷移過來的觸發器。

  3. 建立源庫到目標資料庫的同步或遷移執行個體。

    相關配置文檔,請參見同步方案概覽遷移方案概覽

    重要
    • 同步執行個體:同步類型預設已勾選增量同步處理,您只需勾選全量同步,請勿勾選庫表結構同步

    • 遷移執行個體:遷移類型勾選全量遷移增量遷移,請勿勾選庫表結構遷移

  4. (可選)資料轉送完成後,結束或釋放執行個體。

    操作文檔,請參見結束DTS執行個體釋放DTS執行個體

    說明

    執行個體結束或釋放後,請根據業務需求手動在目標庫中添加觸發器。

案例介紹

說明

本操作以自建MySQL同步至RDS MySQL為例介紹配置流程。

資料準備

MySQL資料庫triggertestdata中存在了兩個表:parent和child。其中,表parent中有一個觸發器(定義:當INSERT一條資料到表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`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=utf8

觸發器

data_check

CREATE TRIGGER data_check
AFTER INSERT ON parent
FOR EACH ROW
insert into child(user_vs_id, name) values(new.user_vs_id, new.name) ;

在此案例中,如果在資料同步時,在源庫的表parent中執行了INSERT操作,將導致源和目標庫中的表child資料不一致。為解決該問題,需要刪除被遷移到目標庫中的觸發器。

操作步驟

  1. 建立一個資料移轉執行個體,將源庫的結構遷移至目標庫。

    1. 進入遷移任務的列表頁面。

      1. 登入Data Management服務

      2. 在頂部功能表列中,單擊整合與開發(DTS)

      3. 在左側導覽列,選擇資料轉送(DTS) > 資料移轉

      說明
    2. 遷移任務右側,選擇遷移執行個體所屬地區。

      說明

      新版DTS遷移工作清單頁面,需要在頁面左上方選擇遷移執行個體所屬地區。

    3. 單擊創建任務,進入任務配置頁面。

    4. 配置源庫資訊目標庫資訊後,單擊頁面下方的測試連接以進行下一步

      參數說明等資訊,請參見自建MySQL遷移至RDS MySQL

    5. 遷移類型選擇為庫表結構遷移,然後選擇待遷移的資料庫或Schema。

      image

    6. 根據業務需求,完成後續配置。

  2. 由於執行結構遷移時,觸發器也會被遷移至目標庫中。當遷移執行個體完成後,您需要登入目標資料庫,執行如下命令刪除被遷移過去的觸發器。

    drop trigger <觸發器名稱>;

    樣本:

    drop trigger data_check;
  3. 建立資料同步執行個體,將源庫的資料同步至目標庫中。

    1. 在左側導覽列,單擊資料同步

    2. 配置源庫資訊目標庫資訊後,單擊頁面下方的測試連接以進行下一步

      參數說明等資訊,請參見自建MySQL同步至RDS MySQL

      說明

      同步執行個體配置的源庫和目標庫需與步驟1保持一致。

    3. 同步類型手動勾選全量同步

      說明
      • 同步對象需和步驟1中配置的遷移對象保持一致。

      • 同步類型預設已勾選增量同步處理,請勿勾選庫表結構同步

      image

    4. 根據業務需求,完成後續配置。

資料一致性測試

  1. 登入來源資料庫,在表parent中插入一條記錄。

    insert into parent values(1,'testname');

    執行該操作後,由於源庫觸發器的緣故,該條記錄也會被寫入至源庫的child表中。

  2. 登入源和目標資料庫,查詢表child的資料,比對其資料是否一致。

    • 源庫查詢結果

      +--------------+------------+----------+
      | sys_child_id | user_vs_id | name     |
      +--------------+------------+----------+
      |         2001 |          1 | testname |
      +--------------+------------+----------+
    • 目標庫查詢結果

      +--------------+------------+----------+
      | sys_child_id | user_vs_id | name     |
      +--------------+------------+----------+
      |         2001 |          1 | testname |
      +--------------+------------+----------+

    經比對,資料一致。

後續操作

  1. 在資料同步需求完成後,結束步驟3建立的同步執行個體。

    更多資訊,請參見結束DTS執行個體

  2. (可選)查看觸發器的建立文法。

    1. 找到步驟1建立的遷移執行個體。

    2. 單擊目標執行個體的ID。

    3. 任務管理頁面,單擊結構遷移2模組。

    4. 任務詳情頁簽,單擊查看建立文法

  3. 登入目標資料庫,手動添加觸發器。