当您同步实例的对象为整库,且该数据库中包含了会更新库内某个表的触发器(Trigger)时,可能会导致源库和目标库的数据不一致。本文介绍源库存在触发器的情况下如何正确地配置同步作业,以确保数据的一致性和完整性。
背景信息
若同步或迁移实例的源库包含触发器且实例满足以下条件,请参考相关文档同步或迁移触发器,以确保源库和目标库的数据一致性。其他包含触发器的同步或迁移实例,请参考本文进行操作。
源库 | 目标库 | 说明 | 相关文档 |
无限制 | PostgreSQL、PolarDB PostgreSQL版、PolarDB PostgreSQL版(兼容Oracle) |
| |
MySQL、PolarDB MySQL版、MariaDB | MySQL、PolarDB MySQL版、MariaDB | 支持手动配置同步或迁移触发器的方式。 | |
SQL Server | SQL Server |
实现流程
案例介绍
本操作以自建MySQL同步至RDS MySQL为例介绍配置流程。
数据准备
MySQL数据库triggertestdata中存在了两个表:parent和child。其中,表parent中有一个触发器(定义:当INSERT一条数据到表parent之后,将其INSERT写入的数据写入一份至表child中)。
表结构及触发器定义如下表所示。
对象类型 | 名称 | 结构语句 |
表 | parent |
|
表 | child |
|
触发器 | data_check |
|
在此案例中,如果在数据同步时,在源库的表parent中执行了INSERT操作,将导致源和目标库中的表child数据不一致。为解决该问题,需要删除被迁移到目标库中的触发器。
操作步骤
创建一个数据迁移实例,将源库的结构迁移至目标库。
进入迁移任务的列表页面。
登录DMS数据管理服务。
在顶部菜单栏中,单击集成与开发(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 | +--------------+------------+----------+
经比对,数据一致。