数据传输服务DTS

数据传输服务DTS支持关系型数据库、NoSQL及OLAP等数据源之间的数据迁移同步。它提供数据库不停服迁移、数据实时同步及实时数据订阅等功能,助您构建高安全、高可靠、易扩展的数据架构

立即购买

数据传输服务DTS

数据传输服务DTS支持关系型数据库RDBMS、NoSQL、OLAP等数据源之间的数据迁移同步。它提供数据库不停服迁移、实时数据订阅及数据实时同步等多种数据传输方式。通过DTS,您可以在源数据库正常运行情况下,平滑地完成数据迁移。同时,您还可以利用DTS进行RDS实例间的数据实时同步,有效解决数据异地容灾、减少跨地区访问等业务问题。除此之外,DTS还支持RDS实例增量数据实时订阅,通过数据订阅,您可以实现轻量级缓存更新、异步消息通知及定制化数据实时同步等业务场景。


优点

零停机数据迁移测试

  • 数据传输服务DTS可以帮助您实现零停机数据迁移。在迁移过程中,源数据库可以正常提供服务,迁移过程中,源数据库产生的所有更新数据都会被同步复制到目标实例。

  • 当源数据库的全量数据完全迁移到目标实例后,目标实例就会跟源实例保持增量数据实时同步。在增量数据实时同步过程中,您可以选择一个业务低峰期,将应用平滑切换到目标实例。

高性能

  • 数据传输过程支持多种传输优化手段,包括传输数据压缩、连接重传等多种网络优化措施,同步粒度细化到事务级别,有效提升传输性能。

  • 特定场景下,全量迁移性能高达70MB/s,实时同步性能高达30000+ Records/s

丰富多样

  • 支持大部分常见数据库类型 (MySQL/SQLServer/Oracle等),支持同构数据源之间的迁移同步,例如MySQL->MySQL。同时,支持异构数据源之间的迁移同步,例如Oracle->MySQL

  • 支持本地IDC自建数据源到Aliyun RDS、ECS的上云迁移,ECS、RDS之间的迁移,以及任何两个RDS之间的迁移

  • 支持数据迁移、数据实时同步及增量数据实时订阅等多种传输方式

高可靠

  • DTS会持续监控系统中的所有任务分,任何一个任务发生故障,它都会从中断位置断点重启任务,业务无感知

  • DTS会持续监控源跟目标实例的健康状况,如果发现数据源(RDS)连接信息发生变化,DTS会动态修改任务的数据源连接,保证任务稳定性

简单易用

  • 无需部署安装,购买完成后,通过三个步骤的配置即可成功启动传输任务

  • 任务状态透明直观,运维监控体系完善,极大降低使用成本

产品详情

数据传输服务DTS支持关系型数据库RDBMS、NoSQL、OLAP等数据源之间的数据迁移同步。

它提供的数据迁移功能,即支持同构数据源之间的数据迁移,例如MySQL->MySQL,同时能够支持异构数据源之间的数据迁移,例如Oracle->MySQL.通过数据迁移功能,可以实现零停机数据迁移,在迁移过程中,源数据库正常运行,从而最大程度降低依赖该数据库的应用程序的停机时间。

DTS还支持任意两个RDS实例间的数据实时同步,通过这个功能,您可以实现异地数据容灾,减少跨地域数据请求,从而有效提升应用稳定性及用户体验。

除上面两个功能,DTS支持的数据订阅功能,能够实时获取RDS增量更新数据,通过这个功能,您可以实现轻量级缓存更新、异步消息通知及定制化数据同步等业务场景。


功能

数据迁移

零停机迁移

  • 迁移过程中,源数据库可以正常提供服务。迁移过程中,源数据库产生的所有变更数据都会被持续同步到目标实例

  • 当源数据库的全量数据迁移完成后,目标实例就会保持跟源实例的增量数据实时同步,您可以选择业务低峰期,将业务平滑切换到目标实例

支持所有常用数据源

  • 支持同异构数据源之间的数据迁移,同构数据源支持MySQL、SQLServer等数据源,异构数据源支持Oracle->MySQL间的数据迁移

  • 支持从本地自建数据库到RDS、ECS的数据迁移,支持ECS自建数据库到RDS的数据迁移,同时支持任意两个RDS实例间地数据迁移

数据实时同步

  • 支持任意两个RDS实例间地数据实时同步

  • 同步过程中支持动态修改同步对象,查看同步状态及同步性能等操作

实时数据订阅

  • 支持RDS For MySQL的binlog数据实时订阅

  • 订阅通道运行过程中,支持动态修改订阅对象、在线查看订阅数据及消费时间修改等操作

完善的监控体系

  • 提供链路状态,同步流量,同步延迟,订阅消费延迟等多种性能指标,让您全方位了解链路状况

  • 提供链路状态,同步延迟,订阅消费延迟等链路信息的监控报警,让您实时获取链路异常状态

使用场景

1) 零停机迁移

DTS支持零停机数据迁移,在迁移过程中,源数据库可以正常提供服务。迁移过程中,源数据库产生的所有变更数据都会被持续同步到目标实例。当源数据库的全量数据迁移完成后,目标实例就会保持跟源实例的增量数据实时同步,您可以选择业务低峰期,将业务平滑切换到目标实例。

推荐配置

零停机迁移

2) 数据异地灾备,秒级恢复地区故障

由于地区断电、断网等客观原因,产品可用性并不能达到100%。当出现这些故障时,如果用户业务部署在单个地区,那么就会因为地区故障导致服务不可用,且不可用时间完全依赖故障恢复时间。
为了解决地区故障导致的服务不可用,提高服务可用性,可以在构建异地灾备中心。当业务中心发生地区故障时,直接将业务流量切换到灾备中心,立刻恢复服务。

推荐配置

异地灾备

3) 减少跨地区访问,提升用户体验

对于用户分布在多个区域的业务,如果业务单地区部署,那么其他地区的用户需要跨地区远距离访问服务,导致访问延迟大,用户体验差的问题。为了优化访问体验,可尽量减少跨地域访问。通过DTS数据实时同步功能,可以在每个地区构建一个只读服务,地区内的读访问请求可以全部落在地区内部,所有用户的写请求路由回读写中心。由此很大程度降低跨地域的远距离访问,提升用户体验。

推荐配置

跨地区访问

4) 在线->离线实时数据同步,实现实时数据分析

通过DTS的增量数据实时订阅功能,可以实现RDS到Analytic DB的数据实时同步。 这个功能可以有效解决用户进行实时大数据分析的需求。

推荐配置

在线-离线数据通道

5) 轻量级缓存更新策略,让核心业务更简单可靠

为加快业务访问速度,提升业务读并发,很多用户都会在业务架构中引入缓存层。业务所有读请求全部路由到缓存层,更新数据持久化到存储DB。对于这种架构用户需要解决,业务数据更新时,缓存层中的缓存数据更新问题。
通过DTS提供的实时数据订阅功能,可以在不影响DB的情况下,异步订阅DB的增量数据,更新缓存的数据,实现轻量级的缓存更新策略。

推荐配置

缓存更新

这种缓存更新策略的优势在于:
(1) 更新路径短,延迟低
缓存失效为异步流程,业务更新DB完成后直接返回,不需要关心缓存失效流程,整个更新路径短,更新延迟低
(2) 应用简单可靠
应用无需实现复杂双写逻辑,只需启动异步线程监听增量数据,更新缓存数据即可
(3) 应用更新无额外性能消耗
因为数据订阅是通过解析DB的增量日志来获取增量数据,获取数据的过程对业务、DB性能无损.

6) 异步消息通知,让核心业务更简单可靠

通过DTS数据订阅,可以实现异步松耦合业务间的异步消息通知机制。这种消息通知机制,是通过DTS抓取上游业务DB的变更数据,来消费触发下游业务的更新逻辑。
相对于用户在上游业务更新过程中,投递异步消息的方式,这种消息通知机制,具备如下优势:
更新路径短,延迟低
上游应用更简单可靠

推荐配置

消息通知

快速入门

通过数据传输服务DTS控制台快速创建并管理DTS实例。

通过管理控制台使用数据传输服务DTS

阿里云管理控制台提供简单的基于 Web 的用户使用界面,允许您创建并管理传输链路。

使用此控制台,您可以创建、修改并管理各个 数据传输 任务。

要查看有关如何通过管理控制台使用 数据传输DTS 的分步概述,请阅读此 DTS 快速入门指南

访问数据传输服务DTS产品文档

通过数据传输服务DTS,可以了解DTS的产品架构,实现原理及具体的用户使用手册。

要创建阿里云DTS实例,请参阅 DTS文档 以详细了解阿里云 DTS 的工作原理以及如何修改和管理 DTS实例。该文档可以帮助您了解数据传输服务DTS的典型应用场景。

资源

下面为SDK和文档链接,通过这些资源,您可以进一步了解DTS的架构实现,以及DTS的典型应用场景等。

常见问题

1.DTS是否能支持两个不同阿里云账号下的RDS实例之间的数据迁移?

可以
进行跨阿里云账号RDS实例迁移时,需要以目标RDS实例所属的阿里云账号登陆DTS。同时,配置迁移任务时,源实例需要选择有公网IP的自建数据库,然后配置RDS实例的连接信息。

2.DTS的增量迁移基本原理是什么?

DTS的增量迁移基本原理是什么?

3. DTS 迁移过程中,是否会锁表,对源库是否有影响?

如果用户选择了全量数据迁移和增量数据迁移,在全量数据迁移过程中,如果迁移对象中存在非事务且无主键(例如Myisam)的表,那么为保证迁移数据一致性,DTS会给这些表上只读锁,其他情况下,DTS不会给源实例上锁。

4. DTS迁移时,通过内网还是公网访问ECS?

当ECS为下面两种情况时,DTS会通过外网访问ECS,其他情况下通过内网访问。
1)ECS实例为VPC网络
2)ECS为迁移链路源实例,且跟目标实例不在一个地区

5. DTS迁移时,是通过内网还是公网访问RDS实例?

当RDS为迁移源实例且跟目标实例不在一个地域时,DTS通过公网访问RDS实例。其他情况下,DTS通过内网访问RDS实例。

6. 数据迁移过程中,源实例的DDL操作是否会被同步到目标库

如果源实例为MySQL或MongoDB,那么DDL操作会被同步。
如果源实例为SQLServer、PostgreSQL,DDL操作暂不支持同步 。

7.DTS是否支持将VPC ECS上的自建数据库迁移到RDS?

支持,但是ECS实例需要挂载EIP,配置迁移任务时,源实例选择ECS实例,DTS会自动选择使用ECS的弹性公网IP访问ECS实例。

8. DTS进行RDS迁移时,是从RDS的主库还是备库拉取数据?

DTS进行数据迁移时,是从RDS实例的主库拉取数据

9. DTS是否支持在一个RDS实例中,复制数据库A的数据到数据库库B?

支持,DTS支持库名映射功能,可以实现在一个RDS实例内实现两个数据库之间的数据复制

10. DTS是否支持进行两个RDS之间,不同库名的数据库之间的迁移?

不能。经典网络中的 ECS 实例和专有网络只能通过公网(外网)通信。

11. 使用DTS进行数据迁移,源数据库的数据会不会在迁移后被删除掉?

不会,DTS进行数据迁移时,只是复制源数据库的数据,不会对源数据库的数据产生影响

12.创建迁移任务时,报获取迁移结构失败是什么原因?

这是由于DTS连接不上源实例导致获取结构对象失败。可能的原因包括:
1)配置的连接地址信息有误
2)本地数据库配置了防火墙
3)数据库远程监听没有启动

13.数据迁移时,目标数据库中多了一个表increment_trx,这个表是做什么的?

increment_trx是DTS增量迁移时在目标实例中创建的位点表,主要用于记录增量迁移的位点,解决任务异常重启后的断点续传问题。
在迁移过程中勿删除,否则会导致迁移失败。

14.DTS是否支持定时迁移?

DTS暂时不支持定时自动迁移

15.使用DTS将自建数据库迁移到RDS,为什么迁移完成后,RDS的空间大小会比源数据库大?

您可以使用基于 Web 的阿里云 VPC API ,通过编程创建、管理阿里云 VPC 中的资源,并实现更好的掌控力。

16.DTS是否支持VPC RDS实例的数据迁移?

支持,配置迁移任务时,直接配置RDS实例ID即可

17.全量迁移报java.sql.BatchUpdateException: INSERT, DELETE command denied to user ‘user'

如果目标实例为RDS实例,那么一般都是由于目标RDS实例被锁定了,导致账号写权限被回收。可以先解锁RDS实例后,重启任务。

18.迁移的目标库中已经存在表了,使用DTS进行数据迁移是否会覆盖掉这些数据?

不会,DTS要求目标实例中的迁移对象为空。如果配置的迁移表在目标库中已经存在数据,那么预检查时会报错。

19.迁移任务显示 锁定中 是什么原因?

当您的阿里云账号欠费,同时未及时续费,那么您账号下的迁移任务的状态会调整为锁定中

20.请问下,如果先进行一个全量迁移任务,全量迁移完成后,再进行一个增量同步任务同步增量数据,这期间源数据库的更新数据是否会被完整同步到目标数据库

会存在丢数据的风险。
如果单独做增量迁移任务,那么DTS会从任务启动时间同步数据。在任务启动之前,源数据库产生的增量数据都不会被同步到目标实例。所以从全量迁移完成到增量迁移任务启动之前这段时间内的增量数据会丢失。 如果需要进行不停机数据迁移,建议配置任务时,迁移类型选择 结构迁移+全量数据迁移+增量数据迁移

21.DTS是否支持进行两个阿里云账号下RDS之间的数据迁移

可以,进行跨账号RDS实例之间的迁移时,需要使用目标RDS实例所属的阿里云账号登陆DTS控制台,然后源实例选择其他阿里云账号下的RDS实例。

22.迁移任务一直卡在增量数据迁移阶段,什么时候结束?

增量数据迁移阶段,目标数据库会跟源数据库保持实时同步,不会自动结束。如果您已经完成迁移,可以手动结束任务。

23.DTS是否支持将一个阿里云账号下的ECS自建数据库迁移到另外一个账号下RDS实例?

可以,您需要使用目标RDS实例所属的阿里云账号登陆DTS控制台,然后源实例的类型选择 有公网IP的自建数据库,配置ECS自建数据库的连接方式。

24.迁移任务迁移完成了,释放该迁移任务是否会影响迁移数据库的使用?

不会

25.迁移任务迁移完成了,释放该迁移任务是否会影响迁移数据库的使用?

26.通过DTS,如何实现异地数据灾备?

使用DTS的实时数据同步功能,进行主数据库跟数据灾备之间的数据实时同步。当主实例宕机后,将业务切换到灾备实例

27.DTS是否支持RDS跟本地自建数据库之间的数据实时同步 ?

支持,可以提交工单申请开通

28.数据订阅SDK无法订阅到消息,客户端提示: client partition is empty,wait partition balance

数据订阅启动时,比较慢,一般需要2分钟,此时客户端会提示 client partition is empty,wait partition balance。

29.订阅通道无法修改消费位点

一般是因为订阅通道还有下游在消费,可以先到DTS控制台查看消费来源IP,查看是否还有下游SDK在消费数据。如果存在,那么先停止下游消费后,重新修改消费位点

30.数据订阅SDK报 keep alive error,是什么原因?

出现这个问题有两个可能原因:
1) SDK通过内网访问订阅通道,目前DTS不支持SDK通过内网访问订阅通道
2) 消费位点不在数据订阅通道的数据范围内,需要修改消费位点后,重启SDK

31.出现这个问题有两个可能原因:<br/>1) SDK通过内网访问订阅通道,目前DTS不支持SDK通过内网访问订阅通道<br/>2) 消费位点不在数据订阅通道的数据范围内,需要修改消费位点后,重启SDK

不会,DTS会监控RDS实例,一旦RDS实例发生主备切换,DTS会自动容灾

32.使用数据订阅订阅数据时,报如下错误:<br/> failed to get master store addr for topic aliyun_sz_ecs_rdsr*****y-1-0错误

首先确认,SDK中 usePublicIp = true
如果上面的设置正确,那么排查下消费位点是否在订阅通道的数据范围内,如果不在,那么修改消费位点后,重启SDK

33.数据订阅启动SDK时,报如下错误<br/> Specified signature is not matched with our calculation. at com.aliyuncs.DefaultAcsClient.parseAcsResponse(DefaultAcsClient.java:139)

这个是因为SDK中配置的Access Key/Access Secret 不属于订阅通道对应阿里云账号。修改SDK中 Access Key/Access Secret 后,重新启动SDK

34.一个sdk客户端 可以订阅多个通道吗?

不可以
DTS支持在服务端实现下游SDK的可靠性容灾。当多个SDK下游订阅同一个订阅通道时,只有一个SDK会接收到数据,其他SDK会作为这个SDK的backup,只有当接收数据的SDK发生异常时,DTS会从剩余SDK中选择一个健康节点,向其分发数据

35.启动订阅SDK时报get guid info failed,是什么原因?

这个是由于您在SDK中设置的订阅通道ID不对。需要将示例代码中的client.askForGUID("订阅通道ID");这里的“订阅通道ID”替换成您要订阅的订阅通道对应的ID