数据传输服务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实例为数据源介绍配置流程,其他数据源的配置流程与该案例类似。

同步源数据库 同步目的数据库
  • RDS MySQL实例
  • ECS上的自建数据库
  • 通过专线、VPN网关或智能网关接入的自建数据库
  • 通过数据库网关接入的自建数据库
  • 通过云企业网CEN接入的自建数据库
  • RDS MySQL实例
  • ECS上的自建数据库
  • 通过专线、VPN网关或智能网关接入的自建数据库
  • 通过数据库网关接入的自建数据库
  • 通过云企业网CEN接入的自建数据库

支持同步的SQL操作

操作类型 SQL操作语句
DML INSERT、UPDATE、DELETE、REPLACE
DDL
  • ALTER TABLE、ALTER VIEW
  • CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW
  • DROP INDEX、DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

支持的冲突检测

为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在双向同步的一个节点进行更新。如果同时更新则会按照您在数据同步作业中配置的冲突修复