當您同步執行個體的對象為整庫,且該資料庫中包含了會更新庫內某個表的觸發器(Trigger)時,可能會導致源庫和目標庫的資料不一致。本文介紹源庫存在觸發器的情況下如何正確地配置同步作業,以確保資料的一致性和完整性。
背景資訊
若同步或遷移執行個體的源庫包含觸發器且執行個體滿足以下條件,請參考相關文檔同步或遷移觸發器,以確保源庫和目標庫的資料一致性。其他包含觸發器的同步或遷移執行個體,請參考本文進行操作。
源庫 | 目標庫 | 說明 | 相關文檔 |
無限制 | PostgreSQL、PolarDB PostgreSQL版、PolarDB PostgreSQL版(相容Oracle) |
| |
MySQL、PolarDB MySQL版、MariaDB | MySQL、PolarDB MySQL版、MariaDB | 支援手動設定同步或遷移觸發器的方式。 | |
SQL Server | SQL Server |
實現流程
建立源庫到目標資料庫的遷移執行個體。
相關配置文檔,請參見遷移方案概覽。
重要遷移類型只需勾選庫表結構遷移。
源庫對象中選擇的粒度為資料庫或Schema。
登入目標資料庫,刪除從來源資料庫遷移過來的觸發器。
建立源庫到目標資料庫的同步或遷移執行個體。
重要同步執行個體:同步類型預設已勾選增量同步處理,您只需勾選全量同步,請勿勾選庫表結構同步。
遷移執行個體:遷移類型勾選全量遷移和增量遷移,請勿勾選庫表結構遷移。
(可選)資料轉送完成後,結束或釋放執行個體。
說明執行個體結束或釋放後,請根據業務需求手動在目標庫中添加觸發器。
案例介紹
本操作以自建MySQL同步至RDS MySQL為例介紹配置流程。
資料準備
MySQL資料庫triggertestdata中存在了兩個表:parent和child。其中,表parent中有一個觸發器(定義:當INSERT一條資料到表parent之後,將其INSERT寫入的資料寫入一份至表child中)。
表結構及觸發器定義如下表所示。
物件類型 | 名稱 | 結構語句 |
表 | parent |
|
表 | child |
|
觸發器 | data_check |
|
在此案例中,如果在資料同步時,在源庫的表parent中執行了INSERT操作,將導致源和目標庫中的表child資料不一致。為解決該問題,需要刪除被遷移到目標庫中的觸發器。
操作步驟
建立一個資料移轉執行個體,將源庫的結構遷移至目標庫。
進入遷移任務的列表頁面。
在頂部功能表列中,單擊整合與開發(DTS)。
在左側導覽列,選擇 。
說明實際操作可能會因DMS的模式和布局不同,而有所差異。更多資訊,請參見極簡模式控制台和自訂DMS介面布局與樣式。
您也可以登入新版DTS遷移工作清單頁面。
在遷移任務右側,選擇遷移執行個體所屬地區。
說明新版DTS遷移工作清單頁面,需要在頁面左上方選擇遷移執行個體所屬地區。
單擊創建任務,進入任務配置頁面。
配置源庫資訊和目標庫資訊後,單擊頁面下方的測試連接以進行下一步。
參數說明等資訊,請參見自建MySQL遷移至RDS MySQL。
將遷移類型選擇為庫表結構遷移,然後選擇待遷移的資料庫或Schema。
根據業務需求,完成後續配置。
由於執行結構遷移時,觸發器也會被遷移至目標庫中。當遷移執行個體完成後,您需要登入目標資料庫,執行如下命令刪除被遷移過去的觸發器。
drop trigger <觸發器名稱>;
樣本:
drop trigger data_check;
建立資料同步執行個體,將源庫的資料同步至目標庫中。
在左側導覽列,單擊資料同步。
配置源庫資訊和目標庫資訊後,單擊頁面下方的測試連接以進行下一步。
參數說明等資訊,請參見自建MySQL同步至RDS MySQL。
說明同步執行個體配置的源庫和目標庫需與步驟1保持一致。
同步類型手動勾選全量同步。
說明同步對象需和步驟1中配置的遷移對象保持一致。
同步類型預設已勾選增量同步處理,請勿勾選庫表結構同步。
根據業務需求,完成後續配置。
資料一致性測試
登入來源資料庫,在表parent中插入一條記錄。
insert into parent values(1,'testname');
執行該操作後,由於源庫觸發器的緣故,該條記錄也會被寫入至源庫的child表中。
登入源和目標資料庫,查詢表child的資料,比對其資料是否一致。
源庫查詢結果
+--------------+------------+----------+ | sys_child_id | user_vs_id | name | +--------------+------------+----------+ | 2001 | 1 | testname | +--------------+------------+----------+
目標庫查詢結果
+--------------+------------+----------+ | sys_child_id | user_vs_id | name | +--------------+------------+----------+ | 2001 | 1 | testname | +--------------+------------+----------+
經比對,資料一致。