类别 | 说明 |
同步对象 | 1. 只支持同步基础表、视图,不支持同步函数、触发器、存储过程等对象。 2. 只支持同步 InnoDB 数据库引擎,如果存在其他数据引擎表则任务校验时会报错。 3. 相互关联的数据对象需要同时同步,否则会导致同步失败。 4. 源端 TDSQL MySQL 中对表的数量有限制,整个实例最多为5000个,超出后 DTS 任务会报错;同时,表的数量太多会导致源端的访问耗时变大,引起性能抖动和下降。 5. 增量同步阶段,源库的表名如含有“TDSQLagent”、 “tdsql_sub”字符可能会被过滤或者引起同步异常,因为这些表名与 TDSQL 系统的临时表名相同,TDSQLagent 为扩容时的临时表,tdsql_sub 表为 hash-lish 和 hash-range 的子表,因此建议源端待同步的表名不要设置为这些类型。 |
同步功能 | 目前主键冲突处理策略只支持冲突覆盖,对于全量、增量阶段的主键数据冲突,都会进行冲突覆盖。 |
源库影响 | 1. DBbridge 在执行全量数据同步时,会占用一定源库资源,可能会导致源库负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。 2. 数据同步时,DBbridge 会使用执行同步任务的账号在源库中写入系统库`__tencentdb__`,用于记录事务标记 ID 等元信息,需要确保源库对`__tencentdb__`的读写权限。 为保证后续数据对比问题可定位,同步任务结束后不会删除源库中的`__tencentdb__` `__tencentdb__`系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则`__tencentdb__`系统库约为5MB - 50MB),并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。 3. 默认采用无锁同步方式,全量数据导出阶段不会对源库加全局锁(FTWRL),仅对无主键的表加表锁。 |
操作限制 | 同步过程中请勿进行如下操作,否则会导致同步任务失败。 1. 在全量导出阶段,请勿在源库上执行库或表结构变更的 DDL 操作。 2. 同步任务过程中,请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。 3. 请勿在源库上执行清除 Binlog 的操作。 |
数据类型 | 1. 增量同步期间不支持修改主键,包括主键列、分区表分布键、对主键列的 COMMENT 注释,增删改列字段和长度。 2. 不支持 Geometry 相关的数据类型,遇到该类型数据任务报错。 3. 对于存在浮点类型的表,可能因为全量和增量同步的精度存在差异,导致同步结果的精度不一致。 4. 增量同步过程中,若源库产生了类型为 STATEMENT 格式的 Binlog 语句,则会导致同步失败。 5. 源端 TDSQL MySQL 为 MariaDB 10.1.x 内核时,使用 timestamp 类型不支持指定精度(例如 timestamp(3)),否则 DTS 任务会报错,需要去掉精度,然后重建任务。 |
事务 | 1. 不支持同时包含 DML 和 DDL 语句在一个事务的场景,遇到该情况任务会报错。 2. 源库为 TDSQL MySQL(内核 MariaDB 5.6)时,不支持 XA 事务,遇到 XA 事务任务会报错。 |
HA 切换和扩容 | 1. 源库如果是非 GTID 数据库,DBbridge 不支持源端 HA 切换,一旦源端 TDSQL MySQL 发生切换可能会导致 DBbridge 增量同步中断。 2. 源库如果是自建数据库,采用 SET 连接 TDSQL MySQL 的场景,当同步任务启动后,源端进行了增加或者删除 SET 节点,DBbridge 同步任务会报错,需要用户修改 DBbridge 中源数据库的 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 链路,如果源端待同步的库表中包含二级分区表,则同步到目标端后为单表。 |
一致性校验 | 1. 数据一致性校验的范围,仅对比源数据库选择的库表对象、和同步到目标数据库的库表对象,如果用户在同步任务过程中向目标库进行数据写入,则这部分数据不包含在校验范围内,也不包括其他高级对象(如存储过程、函数、视图等)。如果同步任务配置中未选择“结构初始化”(表示不同步表结构),则进行一致性校验时也不校验表结构。 2. 当前校验任务对 DDL 操作不感知,如果在同步过程中,用户对源库做了 DDL 操作,会出现校验结果不一致,需要用户重新发起校验任务才能得到准确的对比结果。 3. 一致性校验任务中,DTS 单次查询源或者目标端数据的超时限制为10min,单次查询指每个分块校验会查询一次,行校验会查询一次等。如果单次查询时间超出10min(例如源端查询的表为大表时),则会导致校验任务失败。 4. 同步任务配置中如果勾选了部分 DML,或者设置 Where 条件过滤,会造成源与目标库的数据不一致,所以不支持一致性校验,需要勾选全部的 DML、DDL 才可以进行一致性校验。 5. 仅支持单向同步的数据校验;不支持多到一、一到多等复杂拓扑结构的数据校验。 6. 同步任务进行如下配置,可能导致数据校验的结果不一致,请在创建校验任务时知晓。 数据初始化类型未勾选“全量数据初始化”,未勾选则可能存在源和目标的数据不一致,并最终导致数据校验的结果不一致。 7. 数据一致性校验任务可能会增加源数据库实例的负载,因此请在业务低峰期进行操作。 8. 数据一致性校验的任务可以重复执行,但一个 DBbridge 任务在同一时刻只能发起一个一致性校验任务。 9. 完整对比、抽样对比需要校验的表必须具有主键或唯一键,否则将跳过不进行校验,行数校验不要求有主键或者唯一键。 10. 如果在数据一致性校验任务还未结束时,用户选择“结束”同步任务,则一致性校验任务会失败。 11. 一致性校验需要使用执行同步任务的账号,在源数据库中创建新表 CRC_xxx_CMP_xxx,用于记录同步任务过程中的数据对比信息。 |
本页内容是否解决了您的问题?