类别 | 说明 |
同步对象 | 1. 只支持同步基础表、视图,不支持同步函数、触发器、存储过程等对象。 2. 相互关联的数据对象需要同时同步,否则会导致同步失败。 3. 源端 TDSQL MySQL 中对表的数量有限制,整个实例最多为5000个,超出后 DTS 任务会报错;同时,表的数量太多会导致源端的访问耗时变大,引起性能抖动和下降。 4. 增量同步阶段,源库的表名如含有“TDSQLagent”、 “tdsql_sub”字符可能会被过滤或者引起同步异常,因为这些表名与 TDSQL 系统的临时表名相同,TDSQLagent 为扩容时的临时表,tdsql_sub 表为 hash-lish 和 hash-range 的子表,因此建议源端待同步的表名不要设置为这些类型。 |
源库影响 | 1. DTS 在执行全量数据同步时,会占用一定源库资源,可能会导致源库负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。 2. 数据同步时,DTS 会使用执行同步任务的账号在源库中写入系统库`__tencentdb__`,用于记录事务标记 ID 等元信息,需要确保源库对`__tencentdb__`的读写权限。 为保证后续数据对比问题可定位,同步任务结束后不会删除源库中的`__tencentdb__` `__tencentdb__`系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则`__tencentdb__`系统库约为5MB - 50MB),并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。 3. 默认采用无锁同步方式,全量数据导出阶段不会对源库加全局锁(FTWRL),仅对无主键的表加表锁。 |
同步功能说明 | 1. 目前主键冲突处理策略只支持冲突覆盖,对于全量、增量阶段的主键数据冲突,都会进行冲突覆盖。 2. 关于 DDL 的操作约束如下: 在全量导出阶段,请勿在源库上执行库或表结构变更的 DDL 操作。 同步增量阶段,TDSQL MySQL 分布式为源的链路中,源端执行 DDL 时,建议不要在短时间内大并发的执行,有可能会造成链路延迟或者中断。 3. 只支持同步 InnoDB 数据库引擎,如果存在其他数据引擎表则任务校验时会报错。 4. 增量同步期间不支持修改主键,包括主键列、分区表分布键、对主键列的 COMMENT 注释,增删改列字段和长度。 5. 增量同步过程中,若源库产生了类型为 STATEMENT 格式的 Binlog 语句,则会导致同步失败。 |
操作限制 | 同步过程中请勿进行如下操作,否则会导致同步任务失败。 1. 同步任务过程中,请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。 2. 请勿在源库上执行清除 Binlog 的操作。 |
数据类型 | 1. 不支持 Geometry 相关的数据类型,遇到该类型数据任务报错。 2. 对于存在浮点类型的表,可能因为全量和增量同步的精度存在差异,导致同步结果的精度不一致。 3. 源端 TDSQL MySQL 为 MariaDB 10.1.x 内核时,使用 timestamp 类型不支持指定精度(例如 timestamp(3)),否则 DTS 任务会报错,需要去掉精度,然后重建任务。 |
事务 | 1. 不支持同时包含 DML 和 DDL 语句在一个事务的场景,遇到该情况任务会报错。 2. 源库为 TDSQL MySQL(内核 MariaDB 5.6)时,不支持 XA 事务,遇到 XA 事务任务会报错。 |
HA 切换和扩容 | 1. 源库如果是非 GTID 数据库,DTS 不支持源端 HA 切换,一旦源端 TDSQL MySQL 发生切换可能会导致 DTS 增量同步中断。 2. 源库如果是自建数据库,采用 SET 连接 TDSQL MySQL 的场景,当同步任务启动后,源端进行了增加或者删除 SET 节点,DTS 同步任务会报错,需要用户修改 DTS 中源数据库的 SET 配置信息(与源端实际的 SET 保持一致),然后重启任务,这样才能同步到新增或者删除 SET 的信息。 |
分区表同步 | 1. 全量阶段支持同步一级/二级分区表,但分区语法需要符合 TDSQL MySQL 的规范,一级 Hash 分区表仅支持通过 shardkey 方式创建。
TDSQL MySQL 创建分区表的关键语法如下,详细语法请参考 TDSQL MySQL 创建表语法示例。 一级 Hash 分区:shardkey 一级 Range 分区:TDSQL_DISTRIBUTED BY RANGE 一级 List 分区:TDSQL_DISTRIBUTED BY LIST 一级 Hash 分区 + 二级 Range/List 分区:shardkey + PARTITION BY RANGE/LIST 一级 Range 分区 + 二级 Range/List 分区:TDSQL_DISTRIBUTED BY RANGE + PARTITION BY RANGE/LIST 一级 List 分区 + 二级 Range/List 分区:TDSQL_DISTRIBUTED BY LIST + PARTITION BY RANGE/LIST 2. 增量同步阶段,不支持进行密集的 create 二级分区表,再 drop 二级分区表,再 create 二级分区表的操作,否则可能会由于表类型冲突导致任务异常;先 drop 不存在的二级分区表,再 create 二级分区表,可能会导致死锁,任务无报错,需要手动解锁。 3. TDSQL MySQL 同步到 MySQL/MaraDB/Percona 链路,如果源端待同步的库表中包含二级分区表,则同步到目标端后为单表。 |