典名科技本文主要介绍阿里云PolarDBMySQL云原生数据库间的数据同步。包括PolarDB MySQL集群间的单向同步、PolarDB MySQL集群间的双向同步。希望对您有所帮助。
PolarDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库,可完全兼容MySQL,具备简单易用、高性能、高可靠、高可用等优势。通过数据传输服务DTS(Data Transmission Service),您可以实现PolarDB MySQL集群间的单向数据同步。
操作类型 | SQL操作语句 |
---|---|
DML | INSERT、UPDATE、DELETE、REPLACE |
DDL |
|
关于各类同步架构的介绍及注意事项,请参见数据同步拓扑介绍。
当同步对象为整个库,且库中的触发器(TRIGGER)会更新库内某个表时,可能导致源和目标库的数据不一致。相关解决方案请参见源库存在触发器时如何配置同步作业。
RENAME TABLE操作可能导致同步数据不一致。例如同步对象只包含某个表,如果同步过程中源实例对该表执行了重命名操作,那么该表的数据将不会同步到目标库。为避免该问题,您可以在数据同步配置时将该表所属的整个数据库作为同步对象。
数据传输服务DTS(Data Transmission Service)支持两个PolarDB MySQL集群间的双向数据同步,适用于异地多活、异地容灾等多种应用场景。本文介绍双向数据同步的配置步骤。
当同步对象为整个库,且库中的触发器(TRIGGER)会更新库内某个表时,可能导致源和目标库的数据不一致。相关解决方案请参见源库存在触发器时如何配置同步作业。
RENAME TABLE操作可能导致同步数据不一致。例如同步对象只包含某个表,如果同步过程中源实例对该表执行了重命名操作,那么该表的数据将不会同步到目标库。为避免该问题,您可以在数据同步配置时将该表所属的整个数据库作为同步对象。
为保障双向同步链路的稳定性,对于同一张表的DDL更新只能在其中一个同步方向进行同步。即一旦某个同步方向配置了DDL同步,则在反方向上不支持DDL同步,只进行DML同步。
操作类型 | SQL操作语句 |
---|---|
DML | INSERT、UPDATE、DELETE、REPLACE |
DDL |
|
为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在一个PolarDB集群上执行更新。如果发生了误操作,在两个PolarDB集群上均执行更新,那么将出现同步冲突。
DTS通过冲突检测和修复最大程度地维护双向同步实例的稳定性。目前DTS支持进行检测的冲突类型包括:
同步INSERT语句时违背了唯一性约束,例如双向同步的两个节点同时或者在极为接近的时间新增了某个主键值相同的记录,那么同步到对端时,会因为已经存在相同主键值的记录,导致INSERT操作的同步失败。
DELETE要删除的记录在同步的目标集群中不存在。出现这种冲突时,不论配置何种冲突修复策略,DTS都会自动忽略DELETE操作。