数据传输服务DTS(Data Transmission Service)支持两个MySQL数据库之间(比如RDS MySQL、自建MySQL)的双向数据实时同步,适用于异地多活(单元化)、数据异地容灾等多种应用场景。本文以RDS MySQL实例为例,介绍双向数据同步的配置步骤,其他数据源的配置流程与本案例类似。
前提条件
数据同步的源和目标RDS MySQL实例已存在,如不存在请创建RDS实例。
注意事项
- DTS在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据同步前评估源库和目标库的性能,同时建议您在业务低峰期执行数据同步(例如源库和目标库的CPU负载在30%以下)。
- 数据同步时,请勿对源库的同步对象使用gh-ost或pt-online-schema-change等类似工具执行在线DDL变更,否则会导致同步失败。
- 如果除DTS以外的数据没有写入目标库,您可以使用数据管理DMS(Data Management Service)来执行在线DDL变更,详情请参见不锁表结构变更。
警告 如果有除DTS外的数据写入目标库,请勿使用DMS执行在线DDL变更,否则可能引起目标库数据丢失。
- 如双向同步任务的源实例或目标实例位于海外地域,则仅支持同地域的双向同步,不支持跨地域的双向同步。例如,支持日本地域间的双向同步,不支持日本地域与法兰克福地域间的双向同步。
- 目标库为RDS MySQL或RDS MySQL Serverless实例时(除5.7和8.0版本外),DTS会在目标库新建一个有写入权限且仅供DTS内部使用的数据同步账号dtssyncwriter。
费用说明
同步类型 | 链路配置费用 |
---|---|
库表结构同步和全量数据同步 | 不收费。 |
增量数据同步 | 收费,详情请参见计费概述。 |
支持的同步架构
目前DTS仅支持两个MySQL数据库之间的双向同步,暂不支持多个MySQL数据库之间的双向同步。

支持的数据源
MySQL间的双向数据同步支持以下数据源,本文以RDS MySQL实例为数据源介绍配置流程,其他数据源的配置流程与该案例类似。
同步源数据库 | 同步目的数据库 |
---|---|
|
|
支持同步的SQL操作
操作类型 | SQL操作语句 |
---|---|
DML | INSERT、UPDATE、DELETE、REPLACE |
DDL |
|
支持的冲突检测
为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在双向同步的一个节点进行更新。如果同时更新则会按照您在数据同步作业中配置的冲突修复