数据同步问题

更新时间:
复制 MD 格式
  • Q:DTS支持哪些数据库实例的同步?

    A:DTS支持各种数据源之间的数据同步,如关系型数据库管理系统(RDBMS)、NoSQL数据库、联机分析处理(OLAP)数据库。支持同步的数据库实例,请参见同步方案概览。

  • Q:数据同步的工作原理是什么?

    A:数据同步的工作原理,请参见产品架构及功能原理。

  • Q:如何计算同步延迟?

    A:同步延迟是指同步到目标数据库中的最新数据的时间戳,与源数据库的当前时间戳之间的差值。单位为毫秒。正常情况的延迟在1000毫秒以内。

  • Q:数据同步任务是否可以修改同步对象?

    A:可以。修改同步对象的方法,请参见新增同步对象和移除同步对象。

  • Q:数据同步任务是否可以增加新表进行同步?

    A:可以。增加新表的方法,请参见新增同步对象。

  • Q:如何修改运行中的同步任务的表和字段等同步对象?

    A:当同步任务的全量同步阶段结束,进入增量数据同步阶段后可以修改同步对象。修改同步对象的方法,请参见新增同步对象和移除同步对象。

  • Q:暂停同步任务后过一段时间再重启,是否会导致数据不一致?

    A:若同步任务暂停期间源库有变化,则可能会导致源库与目标库数据不一致。待同步任务重启并将增量数据同步到目标库后,目标库数据将与源库一致。

  • Q:删除增量同步任务源库中的数据,目标库中已同步的数据是否会删除?

    A:若增量同步任务所需同步的DML操作没有勾选delete,则目标库中数据不会被删除,否则目标库中已同步的数据会被删除。

  • Q:Redis间的同步,目标Redis实例的数据会被覆盖么

    A:相同Key的数据会被覆盖。DTS会在预检查阶段对目标端进行检查,如果目标端的数据不为空会报错。

  • Q:同步任务是否支持过滤部分字段或数据?

    A:支持。通过映射功能可以过滤无需同步的列,通过指定SQL Where条件可以过滤待同步数据。更多信息,请参见同步或迁移部分列和设置过滤条件。

  • Q:同步任务是否可以转为迁移任务?

    A:不可以,不同类型的任务不支持相互转换。

  • Q:是否可以只同步数据不同步结构?

    A:可以。在配置同步任务步骤时,不勾选库表结构同步即可。

  • Q:数据同步实例的源和目标端数据不一致,可能原因有哪些?

    数据不一致的可能原因如下:

    1. 配置任务时没有清空目标端数据,且目标端有存量数据。

    2. 配置任务时只选择了增量同步模块,没有选择全量同步模块。

    3. 配置任务时只选择了全量同步模块,没有选择增量同步模块,且任务结束后源端数据有变更。

    4. 目标端有除了DTS任务以外的数据写入。

    5. 增量写入存在延迟,增量数据还没有全部写入目标端。

  • Q:数据同步任务是否可以修改源库在目标库的名称?

    A:可以。修改源库在目标库名称的方法,请参见设置同步对象在目标实例中的名称。

  • Q:是否支持DML或DDL操作的实时同步?

    支持,关系数据库之间的数据同步支持的DML操作为INSERT、UPDATE、DELETE,支持的DDL操作为CREATE、DROP、ALTER、RENAME、TRUNCATE。

    说明

    不同场景下支持的DML或DDL操作有所区别,请在同步方案概览中选择符合业务场景的链路,在具体链路配置文档中查看支持的DML或DDL操作。

  • Q:只读实例是否可以作为同步任务的源实例?

    同步任务默认包含增量数据同步,因此有如下两种情况:

    • 实例为记录事务日志的只读实例(如RDS MySQL 5.7或8.0版本),可以作为源实例。

    • 实例为不记录事务日志的只读实例(如RDS MySQL 5.6版本),不可以作为源实例。

  • Q:DTS是否支持分库分表的数据同步?

    A:支持,例如将MySQL、PolarDB MySQL中的分库分表同步到云原生数据仓库 AnalyticDB MySQL 版中,以实现多表归并。

  • Q:为什么同步任务结束后目标实例比源实例的数据量小?

    A:若同步过程中进行了数据过滤,或者源实例内表碎片较多,迁移完成后目标实例的数据量可能会小于源实例。

  • Q:跨账号数据同步任务,是否支持双向同步?

    A:当前仅RDS MySQL实例间、PolarDB MySQL版集群间、Tair(企业版)实例间、云数据库MongoDB版(副本集架构)间、云数据库MongoDB版(分片集群架构)间,支持跨账号的双向同步任务。

  • Q:双向同步实例的反向同步是否支持同步DDL?

    不支持。仅正向同步任务(即源库同步至目标库)支持同步DDL,反向同步任务(即目标库同步至源库)不支持同步DDL,将自动过滤DDL操作。

    说明

    若您需要同步当前反向同步任务的DDL操作,可以尝试在业务允许的条件下调转双向同步实例方向。

  • Q:反向同步任务是否需要手动配置?

    需要。等待正向同步任务同步初始化完成(直至运行状态处于运行中),然后定位至反向同步任务,单击配置任务进行配置。

    说明

    建议在正向同步任务无延迟(延迟为0毫秒)后再配置反向同步任务。

  • Q:DTS是否支持跨境的双向同步任务?

    A:不支持。

  • Q:为什么双向同步任务的一个数据库中增加了记录后,另一个数据库里没有增加?

    A:可能是未配置反向任务。

  • Q:为什么同步任务增量显示一直没有到100%?

    A:DTS增量同步是持续将源端的变更实时同步到目标端,且不会主动结束,即不存在100%的完成状态。如果您不需要继续实时同步,请在DTS控制台结束任务。

  • Q:为什么增量同步任务不能同步数据?

    A:如果DTS实例只配置了增量同步任务,则DTS只会同步任务启动之后的增量数据,任务启动前的数据不会同步至目标库。建议配置任务时同时勾选增量同步、库表结构同步和全量同步,以保障数据一致性。

  • Q:同步RDS数据库的全量数据时,是否会对源库RDS的性能有影响?

    会影响源库的查询性能。有如下三种方法可以减少DTS任务对源库的影响:

    1. 提高源库实例的规格。

    2. 先暂停DTS任务,等源库负载降低后再重启任务。

    3. 调小DTS任务的速率。调整速率的方法,请参见调整全量迁移速率。

  • Q:DTS是否支持MySQL同步到ClickHouse?

    A:DTS从MySQL数据库同步到ClickHouse集群的功能已下线,已购买此功能的用户不受影响。若您需要新购此功能,请查看云数据库ClickHouse产品的官方文档的从RDS MySQL同步章节,配置MySQL到ClickHouse的同步功能。

  • Q:为什么源库为PolarDB-X 1.0的同步实例不显示延迟?

    A:源库为PolarDB-X 1.0的实例是分布式任务,而DTS监控的指标只在子任务中存在,因此源为PolarDB-X 1.0的实例不显示延迟信息。您可以单击实例ID,在实例任务管理的子任务详情中查看延迟信息。

  • Q:为什么多表归并任务报错DTS-071001?

    A:可能是在多表归并任务运行时,在源库进行了Online DDL操作,对源库的表结构等进行了修改,且未手动在目标库进行相应的修改。

  • Q:在旧版控制台配置任务时添加白名单失败,如何处理?

    A:请使用新版控制台配置任务。

  • Q:DTS数据同步过程中,源库执行了DDL操作导致任务失败,如何处理?

    A:根据源库执行的DDL操作,手动在目标端执行DDL后重启任务。数据同步时,请勿对源库的同步对象使用pt-online-schema-change等类似工具执行在线DDL变更,否则会导致同步失败。如果除DTS以外的数据没有写入目标库,您可以使用数据管理DMS(Data Management)来执行在线DDL变更,或者可以通过修改同步对象移除受DDL影响的表。移除操作,请参见移除同步对象。

  • Q:DTS数据同步过程中,目标库执行了DDL操作导致任务失败,如何处理?

    如果在DTS进行增量同步过程中删除了目标库中的某一个库或表,导致任务异常,您可以采取如下两种方案恢复任务:

    • 方法一:重新配置任务,待同步对象不选择导致任务失败的库或表。

    • 方法二:修改同步对象,移除导致任务失败的库或表。具体操作,请参见移除同步对象。

  • Q:同步任务释放后还可以恢复吗?重新配置任务能否保证数据一致性?

    A:同步任务释放后不可以恢复。重新配置任务时,如果不选择全量同步,在任务释放到新任务启动这段时间新增的数据无法同步到目标库,无法保障数据一致性。如果业务对数据要求比较精确,您可以删除目标库的数据,然后重新配置同步任务,并在任务步骤同时选中库表结构同步和全量同步(默认已选中增量同步)。

  • Q:DTS全量同步任务长时间没进度,如何处理?

    A:若待同步的表为无主键的表,全量同步会非常慢。建议为源库待同步的表增加主键后再进行同步。

  • Q:同名的表进行数据同步时,是否支持源表数据在目标表不存在时才进行传输?

    A:支持。在配置任务时,您可以将目标已存在表的处理模式选择为忽略报错并继续执行。表结构一致的情况下,在全量同步期间目标库遇到与源库主键的值相同的记录时,源库中的该条记录不会同步至目标库中。

  • Q:如何配置跨账号的同步任务?

    A:您需要先明确跨账号任务的场景,然后使用数据库实例所属的阿里云账号配置RAM授权,最后再配置跨阿里云账号的任务。

  • Q:无法选择DMS LogicDB实例,如何处理?

    A:请确保实例所属的地域选择正确,若还是不能选择实例,则可能仅有一个实例,请继续配置其他参数。

  • Q:SQL Server为源的同步任务,是否支持同步函数?

    A:不支持。若同步对象选择的粒度为表,且其他对象(如视图、触发器、存储过程)也不会被同步至目标库。

  • Q:数据同步任务报错,如何处理?

    A:您可以根据报错信息,在错误码概览中查看解决方法。

  • Q:同步任务如何开启热点合并?

    A:请参考修改参数值将trans.hot.merge.enable的值修改为true。

  • Q:源库存在触发器时如何进行同步?

    A:当同步对象为整个库,且库中的触发器(TRIGGER)会更新库内某个表时,可能导致源和目标库的数据不一致。同步操作,请参见源库存在触发器时如何配置同步或迁移作业。

  • Q:DTS是否支持同步sys库和系统库?

    A:不支持。

  • Q:DTS是否支持同步MongoDB的admin和local库?

    A:不支持,DTS不支持MongoDB的admin和local作为源和目标库。

  • Q:双向同步任务的反向任务什么时候才能配置?

    A:双向同步任务的反向任务需要正向的增量任务无延迟后才能配置。

  • Q:PolarDB-X 1.0为源时,同步任务的源端PolarDB-X 1.0是否支持扩缩节点?

    A:不支持。若源端PolarDB-X 1.0发生节点的扩缩容,您需要重新配置任务。

  • Q:DTS同步到Kafka的数据可以保证唯一性吗?

    A:不可以。由于写入到Kafka中的数据都是追加的形式,所以在DTS任务重启或重复拉取到源端日志的时候可能会有重复数据。DTS保证数据的幂等性,即数据是按顺序进行排列的,重复数据的最新值会排在后面。

  • Q:DTS数据同步是否支持RDS MySQL至?

    A:支持。配置方法,请参见RDS MySQL同步至云原生数据仓库 AnalyticDB MySQL 版 3.0。

  • Q:为什么Redis间的同步任务不显示全量同步?

    A:Redis间的同步支持全量数据同步和增量数据同步,合并显示为增量同步。

  • Q:全量同步可以跳过吗?

    A:可以。跳过全量同步后增量同步会继续向下进行,但是可能会报错,建议您不要跳过全量同步。

  • Q:DTS是否支持定时自动同步?

    A:DTS暂时还不支持定时启动数据同步任务。

  • Q:同步过程中会不会把表中的碎片空间也一起同步过去?

    A:不会。

  • Q:从MySQL 8.0同步到MySQL 5.6需要注意什么?

    A:您需要在MySQL 5.6中创建好数据库后再进行同步操作。建议源和目标库版本保持一致,或者从低版本同步到高版本以保障兼容性。如为高版本同步至低版本,可能存在数据库兼容性问题。

  • Q:是否可以将源库中的账号同步至目标库?

    A:当前仅RDS MySQL实例间的同步任务支持同步账号,其余同步任务暂不支持。

  • Q:是否可以配置跨账号的双向同步任务?

    当前仅RDS MySQL实例间、PolarDB MySQL版集群间、Tair(企业版)实例间、云数据库MongoDB版(副本集架构)间、云数据库MongoDB版(分片集群架构)间,支持跨账号的双向同步任务。

    说明

    没有是否跨阿里云账号配置项的任务,您可以尝试使用CEN实现跨账号的双向同步任务。更多信息,请参见跨阿里云账号或跨地域访问数据库资源。

  • Q:消息队列Kafka版为目标端时的参数如何配置?

    A:请根据实际情况进行配置,部分特殊参数的配置方法请参见配置消息队列Kafka版实例的参数。

  • Q:数据同步实例可以免费试用几个?

    A:仅可免费试用1个同步实例,有效期3个月。更多信息,请参见阿里云免费试用。

  • Q:使用DTS进行Redis数据同步或迁移任务时,报错ERR invalid DB index应如何处理?

    原因:ERR invalid DB index的错误是由于目标库在执行SELECT DB操作时出现的问题。这通常是由于目标库的databases数量不足所致。如果目标库使用了代理,请检查代理是否可以解除对databases数量的限制。

    解决方案:修改目标库的databases配置。建议在扩充至与源库一致后,重启DTS任务即可。查询目标库的databases配置命令如下:

    CONFIG GET databases;
  • Q:SQL Server数据同步或迁移至AnalyticDB PostgreSQL版时,报错IDENTIFIER CLUSTERED应如何处理?

    A:

    原因:在将SQL Server数据同步或迁移至AnalyticDB PostgreSQL版时,由于不支持CREATE CLUSTERED INDEX命令,导致任务无法顺利进行。

    解决方案:在确认延迟时间段内没有其他DDL命令后,修改实例参数sink.ignore.failed.ddl为true(以过滤掉所有DDL的执行),待增量同步/迁移位点推进后,再将sink.ignore.failed.ddl调整回false。

  • Q:在Redis同步或迁移任务中,延长目标库中键(Key)的过期时间是否具有实际作用?

    A:

    为防止在全量数据同步期间键(Key)到期,可以延长任务中目标库键的到期时间。对于包含增量同步/迁移部分的DTS任务,如果源库的键到期并被删除,目标库中相应的键仍会随之释放。

  • Q:在设置延长目标库键值(Key)的过期时间后,若源库键值到期,目标库的键值是否会立即被释放?

    A:

    目标库中的键值(Key)在到期后并不一定会立即释放。仅当源库中的键值到期并被清理时,目标库中的键值才会随之立即释放。

    例如,若源库中的Key设定的到期时间为5秒,并且目标库的Key过期时间延长至30秒,在源库的Key经过5秒后到期并自动清理时,目标库中的Key将会立即被释放。当源库的Key到期并被自动清理时,系统会补充删除操作到AOF文件中,该请求会同步到目标库并执行。

  • Q:使用DTS同步到SelectDB时,报错column_name[xxx], the length of input string is too long than vec schema应如何处理?

    • 可能原因::源端xxx字段的增量大小已超过目标端xxx字段类型的长度限制。

    • 解决方案::如果该字段是STRING类型,可以在SelectDB控制台调大string_type_length_soft_limit_bytes参数来解决,需要调整大于actual length(7241898)。

  • Q:使用DTS同步到SelectDB时,报错column(xxx) values is null while columns is not nullable.应如何处理?

    • 可能原因::xxx字段在目标端是NOT NULL,但是有NULL值的写入。

    • 说明

      常见场景:源端日期格式存在如0000-0000-0000的非法格式数据写入,导致DTS自动将其转换为NULL值,从而引发报错。

    • 解决方案::

      • 将目标端的字段类型调整为允许NULL值写入。

      • 修改同步对象:将问题表移除,并对源端数据进行订正,随后删除目标端的表。再重新修改同步对象并将表添加回来,最后重新执行全量与增量同步。

  • Q:如何修正已配置错误的目标表名映射?

    A:在 DTS 任务配置页面的已选择对象区域,展开目标库,找到映射错误的表,单击右侧的编辑按钮,在弹出的对话框中将目标表名修改为正确名称后保存。

  • Q:新增字段后如何补录历史数据?

    DTS 不会自动回补新增字段的历史数据,该规则适用于所有目标库类型(不仅限于 SelectDB)。如需补录历史数据,请按以下步骤操作:

    1. 在目标表中手动添加新字段。

    2. 在 DTS 控制台修改同步对象,将该表从同步对象中移除。

    3. 执行TRUNCATE清空目标表数据(如需保证数据一致性)。

    4. 重新将该表添加回同步对象,触发全量加增量同步,将包含新增字段的历史数据迁移至目标库。

  • Q:DTS增量同步因表结构不一致报错时,能否批量跳过DML操作?

    DTS不支持直接批量跳过DML操作。可参考以下两种处理方案:

    • 方案一(推荐):补齐缺失的DDL语句,恢复源端与目标端表结构一致后,重新启动任务。此方案不会丢失数据。

    • 方案二:修改同步位点(例如跳过一秒或一分钟的时间范围),跳过报错的增量记录。

    警告

    方案二会跳过该时间段内的所有DML操作(包括INSERT、UPDATE、DELETE),可能导致数据丢失或数据不一致,请谨慎评估后再使用。

  • Q:DTS配置中"是否迁移Event"选项是什么?如何选择?

    是否迁移Event选项用于控制是否将源库中的事件(Event)对象同步到目标库。

    • 否(默认):不同步源库的Event对象。若目标库不需要执行这些定时事件逻辑,保持默认值即可。

    • 是:同步源库的Event定义及触发逻辑到目标库。若需在目标库中完整复现源库的事件调度,请选择此项。

  • Q:修改同步对象时遇到数据不一致或结构不同步如何处理?

    A:当出现以下问题时,可通过"移除并重新添加同步对象"的方式解决:

    • 目标库数据与源库不一致

    • 源端DDL变更(如加字段、改字段类型等)未同步到目标端

    • 含NULL值的唯一键表同步异常

    • SQL语法错误(如near 'null'报错)

    处理步骤:

    1. 修改DTS任务的同步对象,移除出现问题的表。

    2. 在目标端删除(DROP TABLE)或清空(TRUNCATE TABLE)对应的问题表。

    3. 重新将该表添加至DTS任务的同步对象,并启动预检查。DTS将对该表重新执行结构初始化、全量同步和增量同步。

  • Q:数据同步或迁移任务运行时,修改目标库数据会有什么影响?

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

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

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

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

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

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

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

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

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

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

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

      说明

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

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

      警告

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

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

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

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

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

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

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

    • 可能原因::

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

    • 解决方案::

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

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

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

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

    • 可能原因::

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

    • 解决方案::

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

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

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

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

    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:同步或迁移实例运行后是否支持调整速率?

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

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

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

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

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

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

    A:不需要。

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

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

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

    A:不支持。

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

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

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

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