数据同步和迁移共同复用源

更新时间:
复制 MD 格式
  • Q:数据同步或迁移任务运行时,修改目标库数据会有什么影响?

    • 目标库修改数据有可能导致DTS任务失败。数据迁移或同步过程中,如果对目标库待迁移或同步的对象执行操作,可能会导致主键冲突,无更新记录等情况,最终DTS任务失败。但是可以执行不会导致DTS任务中断的操作,比如在目标实例创建一个表并执行写入,因为不在该表迁移或同步对象表中,因此不会引导致DTS失败。

    • 由于DTS是读取源实例数据库信息,将其全量数据、结构数据、增量数据迁移或同步到目标实例中,因此任务进行时目标库修改数据可能会被来自源库迁移或同步的数据覆盖。

  • Q:是否支持跨账号的数据迁移或数据同步?

    A:支持。配置方式,请参见配置跨阿里云账号的任务。

  • Q:数据同步或迁移任务运行时,源库和目标库是否可以同时写入数据?

    A:可以,但在DTS实例运行期间,若存在除DTS外的其他数据源向目标库写入数据,则可能会导致目标库数据或DTS实例异常。

  • Q:DTS是否支持按时间段抽样同步或迁移数据?

    A:不支持。

  • Q:同步或迁移数据时,是否需要手动在目标库创建数据表?

    A:对于支持库表结构任务的DTS实例(库表结构同步或库表结构迁移),若您配置了库表结构任务(同步类型勾选了库表结构同步或者迁移类型勾选了库表结构迁移),则无需手动在目标库创建数据表。

  • Q:同步或迁移数据时,源库和目标库的网络是否需要打通?

    A:不需要。

  • Q:如何使用API给同步或迁移任务配置ETL功能?

    A:您可以在API接口的预留参数Reserve中,通过公共参数(如etlOperatorCtl和etlOperatorSetting)进行配置。更多信息,请参见ConfigureDtsJob和Reserve参数说明。

  • Q:DTS同步或迁移结束后,源库数据是否会被保留?

    A:是,DTS不会删除源库的数据。若您无需保留源库中的数据,请自行删除。

  • Q:同步或迁移实例运行后是否支持调整速率?

    A:支持。更多信息,请参见调整迁移速率。

  • Q:增量同步报错,提示数据包过大或目标端 max_allowed_packet 值不足,如何解决?

    • 可能原因::

      源端存在单行数据量较大的记录,该记录在增量同步时超过了目标端 max_allowed_packet 参数的限制,导致同步报错。

    • 解决方案::

      1. 登录源端数据库,查询当前 max_allowed_packet 的参数值:

        SHOW VARIABLES LIKE 'max_allowed_packet';

        记录该值(例如 1073741824,即 1 GB)。

      2. 登录 RDS 管理控制台(若目标端为 PolarDB MySQL,则登录 PolarDB 控制台),在目标端数据库实例的参数配置页面,将 max_allowed_packet 参数值调整为不低于源端的值。

      3. 参数修改完成后,在 DTS 控制台重启同步任务,验证同步是否恢复正常。

  • Q:同步中断数小时,怀疑目标端存在 MDL 锁,如何处理?

    • 可能原因::

      目标端存在由长 DDL 操作(如大表加字段、重建索引等)引起的元数据锁(MDL 锁),阻塞了 DTS 的增量数据写入,导致同步链路长时间中断。

    • 解决方案::

      1. 登录 RDS 管理控制台,进入目标端数据库实例,执行 SHOW FULL PROCESSLIST 定位持有 MDL 锁的异常会话,并将其终止(kill)。

      2. 登录 DTS 控制台,修改同步对象,将受 MDL 锁影响的表从同步对象中移除。

      3. 在目标端数据库中删除该表(操作前请确认数据已备份或数据可被清空)。

      4. 等待 DTS 同步任务恢复正常运行且同步延迟归零后,再次修改同步对象,将该表重新添加回同步范围,完成重迁。

  • Q:增量同步报错,提示目标库缺少临时表或出现 SELECT INTO 冲突,如何解决?

    • 可能原因::

      此问题并非目标库真正缺少临时表,而是源库开启了变更数据捕获(CDC)功能后,DTS 创建的触发器拦截了 SELECT INTO 的隐式建表操作,导致数据同步过程中出现冲突。

    • 解决方案::

      1. 确认源端事务日志文件是否存在且完整。

      2. 在源端数据库中关闭 CDC 功能。

      3. 登录 DTS 控制台,重新配置同步任务,在增量同步方式中选择解析源库日志,然后重启任务。

  • Q:使用DTS进行数据同步或迁移,是否会覆盖目标端已存在的数据?

    A:以数据同步为例,DTS的默认行为和相关参数如下:

    DTS默认行为:若在同步任务运行时,若遇到主键或唯一键冲突:

    • 表结构一致的情况下,如在目标库遇到与源库主键或唯一键的值相同的记录:

      • 全量期间,DTS会保留目标集群中的该条记录,即源库中的该条记录不会同步至目标数据库中。

      • 增量期间,DTS不会保留目标集群中的该条记录,即源库中的该条记录会覆盖至目标数据库中。

    • 表结构不一致的情况下,可能会导致无法初始化数据、只能同步部分列的数据或同步失败,请谨慎操作。

    相关参数:在配置任务的过程中,您可以通过目标已存在表的处理模式参数管理相关数据的处理方式。

    • 预检查并报错拦截:检查目标数据库中是否有同名的表。如果目标数据库中没有同名的表,则通过该检查项目;如果目标数据库中有同名的表,则在预检查阶段提示错误,数据同步任务不会被启动。

      说明

      如果目标库中同名的表不方便删除或重命名,您可以更改该表在目标库中的名称,请参见库表列名映射。

    • 忽略报错并继续执行:跳过目标数据库中是否有同名表的检查项。

      警告

      选择为忽略报错并继续执行,可能导致数据不一致,给业务带来风险,例如:

      • 表结构一致的情况下,如在目标库遇到与源库主键或唯一键的值相同的记录:

        • 全量期间,DTS会保留目标集群中的该条记录,即源库中的该条记录不会同步至目标数据库中。

        • 增量期间,DTS不会保留目标集群中的该条记录,即源库中的该条记录会覆盖至目标数据库中。

      • 表结构不一致的情况下,可能会导致无法初始化数据、只能同步部分列的数据或同步失败,请谨慎操作。

    建议:为保证数据一致性,建议您在业务允许的条件下删除目标表,再配置DTS任务。