当同步对象为整个库,且库中的触发器(TRIGGER)会更新库内某个表时,可能导致源和目标库的数据不一致。本文介绍触发器存在情况下如何配置同步作业。
案例介绍
数据库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 `triggertestdata`.`data_check` AFTER INSERT ON triggertestdata.parent FOR EACH ROW begin insert into child(user_vs_id, name) values(new.user_vs_id, new.name) ; end; |
在此案例中,如果在数据同步时,在源库的表parent中执行了INSERT操作,将导致源和目标库中的表child数据不一致。为解决该问题,需要删除被迁移到目标库中的触发器。
操作步骤
本文以自建MySQL同步至RDS MySQL为例介绍配置流程,更多配置案例请参见DTS数据同步方案概览。