DTS是否支持同步不同schema下的表到同一个schema?
DTS支持同步不同schema的表对象到同一个schema,但是表不可以冲突。
例如:将SCHEMA_A 的表A,SCHEMA_B的表B, 同步到SCHEMA_C下的表A和表B。
DTS是否支持双向实时同步?
DTS目前支持MySQL->MySQL以及PostgreSQL->PostgreSQL的双向同步。
MySQL->MySQL、PostgreSQL->PostgreSQL均只支持DML双向实时同步,但不支持DDL的双向实时同步。
- MySQL->MySQL双向同步需要满足如下条件:
- 待同步的表需具备主键。
- 源和目标库大版本需保持一致。
- 为了防止双向回环同步, DTS会在源库和目标库的ctyun_dts库下面分别创建回环标记表,表名:circle_任务id_时间戳,任务运行期间请勿操作此表。
- 当前天翼云DTS只支持DML的双向同步,DDL的同步方面,仅正向同步(源库同步至目标库)支持DDL,反向同步(目标库同步至源库)不支持同步DDL,将自动过滤DDL操作。
- PostgreSQL->PostgreSQL双向同步需要满足如下条件:
- 源和目标库大版本需保持一致。
- DTS为了防止双向回环同步,会在源库和目标库分别创建回环标记表public.ctyun_circle_check,请勿操作此表。
- 当前天翼云DTS只支持DML的双向同步,DDL的同步方面,仅正向同步(源库同步至目标库)支持DDL,反向同步(目标库同步至源库)不支持同步DDL,将自动过滤DDL操作。
MySQL双向实时同步时,若源库和目标库同时变更同一个表的同一条数据,会怎么样?
数据库双写问题是业界难题,DTS的双向同步无法完全解决数据双写引发的数据冲突问题。在使用双向同步时,您需要在业务层面配合进行相应的改造,保证同一个主键或唯一键的记录只在双向同步的某个节点进行更新。
若短时间内业务对源库、目标库中同一条记录发生变更,DTS采用以下策略来保证数据的最终一致性:
- TaskFailed(遇到冲突,任务报错退出)。
当数据同步遇到冲突时,同步任务直接报错并退出,同步任务进入失败状态,需要您介入修复任务。 - Ignore(遇到冲突,直接使用目标实例中的冲突记录)。
当数据同步遇到冲突时,直接跳过当前同步语句,继续往下执行,选择使用目标库中的冲突记录。 - Overwrite(遇到冲突,直接覆盖目标实例中的冲突记录)。
当数据同步遇到冲突时,直接覆盖目标库中的冲突记录。
正向和反向都可以选择以上一种冲突修复策略,DTS根据用户配置的冲突修复策略进行冲突的检测和处理。
PostgreSQL双向实时同步时,若源库和目标库同时变更同一个表的同一条数据,会怎么样?
数据库双写问题是业界难题,DTS的双向同步无法完全解决数据双写引发的数据冲突问题。在使用双向同步时,您需要在业务层面配合进行相应的改造,保证同一个主键或唯一键的记录只在双向同步的某个节点进行更新。
若短时间内业务对源库、目标库中同一条记录发生变更,DTS采用以下策略来保证数据的最终一致性:
- TaskFailed(遇到冲突,任务报错退出)。
当数据同步遇到冲突时,同步任务直接报错并退出,同步任务进入失败状态,需要您介入修复任务。 - Ignore(遇到冲突,直接使用目标实例中的冲突记录)。
当数据同步遇到冲突时,直接跳过当前同步语句,继续往下执行,选择使用目标库中的冲突记录。 - Overwrite(遇到冲突,直接覆盖目标实例中的冲突记录)。
当数据同步遇到冲突时,直接覆盖目标库中的冲突记录。
正向和反向都可以选择以上一种冲突修复策略,DTS根据用户配置的冲突修复策略进行冲突的检测和处理。