数据传输服务DTS(Data Transmission Service)提供的Exactly-Once写入功能,可以帮助您将既无主键也无唯一约束的表的全量和增量数据准确地同步到目标表。
适用范围
当前仅部分双向同步实例的全量和增量任务支持此功能,详情请参见支持的链路。
多主集群(Limitless)系列的PolarDB MySQL版集群不支持此功能。
计费方式为Serverless的任务,不支持开启Exactly-Once写入功能。
源库存在既无主键也无唯一约束的表,且该表有如下限制:
若源库的数据库类型为MySQL,且接入方式不为云实例,则源库必须开启GTID复制模式,且待同步表的存储引擎必须是事务性存储引擎(如InnoDB)。
待同步的单张表不能超过200 GB。
DDL变更操作不支持Exactly-Once写入功能。此类操作可能导致任务失败,其中数据清理DDL(例如
TRUNCATE)可能会导致数据不一致的问题。开启Exactly-Once写入功能的任务,其增量性能不足,增量写入性能应控制在3000 RPS以内。
支持的链路
仅双向同步实例支持。
源库 | 目标库 |
MySQL | MySQL、PolarDB for MySQL |
PolarDB for MySQL | MySQL、PolarDB for MySQL |
注意事项
配置了Exactly-Once写入功能的双向同步实例,需要注意如下事项:
若源库的数据库类型为MySQL或PolarDB for MySQL,在双向同步实例运行时,源库既无主键也无唯一约束的表会出现短暂的表锁定。
若源库有清理数据的DDL操作(尤其是执行该操作后增量写入模块重启),可能会导致数据丢失,您需自行确保数据的一致性。
全量和增量任务会在目标实例创建名为
dts的数据库或Schema,并且在其中创建多张事务表。在DTS任务运行过程中,请勿对该事务表进行DML操作。反向同步任务是否开启Exactly-Once写入的配置默认与正向同步任务相同且无法修改。
在全量同步过程中,DTS会对待同步的无主键和唯一约束的表进行全表查询,并生成表快照。
操作步骤
进入到正向同步任务的对象配置阶段。
说明若您使用的是旧版配置页,则需要进入配置任务对象及高级配置阶段。
进入方式,请参见同步方案概览中对应的配置文档。
将是否开启Exactly-Once写入选择为是。
根据实际需求,完成后续配置。