本场景介绍使用 DTS 创建腾讯云数据库 TDSQL MySQL 的数据订阅任务操作指导。
前提条件
已准备好待订阅的腾讯云数据库,并且数据库版本符合要求,请参见 数据订阅支持的数据库。
已在源端实例中开启 binlog。
已在源端实例中创建订阅账号,需要账号权限如下:REPLICATION CLIENT、REPLICATION SLAVE、PROCESS 和全部对象的 SELECT 权限。
具体授权语句如下:
create user '迁移账号' IDENTIFIED BY '账号密码';grant SELECT, REPLICATION CLIENT,REPLICATION SLAVE,PROCESS on *.* to '迁移账号'@'%';flush privileges;
约束限制
1. 订阅的消息保存在 DTS 内置 Kafka(单 Topic)中,目前默认保存时间为最近1天,单 Topic 的最大存储为500G,当数据存储时间超过1天,或者数据量超过500G时,内置 Kafka 都会开始清除最先写入的数据。所以请用户及时消费,避免数据在消费完之前就被清除。
2. 数据消费的地域需要与订阅任务所属的地域相同。
3. 当前不支持 geometry 相关的数据类型。
4. 数据订阅源是 TDSQL MySQL 版时,不支持直接执行授权语句授权,所以订阅账号的权限需要在TDSQL 控制台单击实例 ID,进入账号管理页中添加。
5. 订阅账号所需要的权限即上述授权语句中所示权限,对于为订阅账号进行
__tencentdb__ 的授权操作,在控制台修改权限弹窗中选择对象级特权,勾选所有权限即可。6. 数据订阅源是 TDSQL MySQL 版时,不支持订阅二级分区表。
6.1 如果在订阅任务启动前源库创建了二级分区表,则校验任务不通过。
6.2 如果在订阅任务运行中源库创建了二级分区表,那么订阅到二级分区表的数据是子表数据(订阅对象选择整库或者整实例,源库在订阅任务启动后创建的二级分区表也会被订阅,导致最终的结果订阅了二级分区表)。因为二级分区表的底层是通过子表实现,所以不建议用户在订阅任务过程中创建二级分区表,否则会导致如下示例的订阅数据差异。
示例:源库表名为“test_a”是二级分区表,那么 DTS 订阅到该表的 DML 的表名为“test_a_tdsql_subp0/test_a_tdsql_subp1”。
7. 订阅任务过程中,如果进行修改订阅对象等操作会发生任务重启,重启后可能会导致用户在 Kafka 客户端消费数据时出现重复。
7.1 DTS 是按最小数据单元进行传输的,增量数据每标记一个 checkpoint 位点就是一个数据单元,如果重启时,刚好一个数据单元传输已完成,则不会导致数据重复;如果重启时,一个数据单元还正在传输中,那么再次启动后需要重新拉取这个数据单元,以保证数据完整性,这样就会导致数据重复。
7.2 用户如果对重复数据比较关注,请自行在消费数据时设置去重逻辑。
8. 源端 TDSQL MySQL 中对表的数量有限制,整个实例最多为5000个,超出后 DTS 任务会报错;同时,表的数量太多会导致源端的访问耗时变大,引起性能抖动和下降。
注意事项
数据订阅源是 TDSQL MySQL 版的订阅任务,各个分片的 DDL 操作都会被订阅并投递到 Kafka,所以对于一个分表的 DDL 操作,会出现重复的 DDL 语句。例如,实例 A 有3个分片,订阅了一个分表 tableA,那么对于表 tableA 的 DDL 语句会订阅到3条。
Kafka 中的每条消息的消息头中都带有分片信息,以 key/value 的形式存在消息头中,key 是 ShardId,value 是 SQL 透传 ID,可根据 SQL 透传 ID 区分该消息来自哪个分片。用户可以在TDSQL 控制台 > 实例列表 > 分片管理中查看 SQL 透传 ID。

支持订阅的 SQL 操作
操作类型 | 支持的 SQL 操作 |
DML | INSERT、UPDATE、DELETE |
DDL | CREATE DATABASE、DROP DATABASE、CREATE TABLE、ALTER TABLE、DROP TABLE、RENAME TABLE |
操作步骤
1. 登录DTS 控制台,在左侧导航选择数据订阅,单击新建数据订阅。
2. 在新建数据订阅页,选择相应配置,单击立即购买。
参数 | 描述 |
计费模式 | 支持包年包月和按量计费。 |
数据库 | 请根据具体数据库类型进行选择。 |
地域 | 源库为腾讯云数据库,这里的地域需与源数据库实例的地域保持一致。源库为非腾讯云数据库,这里的地域选择与数据消费的地域保持一致,如果数据消费地域无特殊要求,这里选择离源数据库最近的一个地域即可。 |
版本 | 选择 2.0。 |
规格 | 请根据业务诉求选择规格。 |
标签 | 给订阅任务设置标签键与标签值,便于通过标签高效管理多个任务。 |
订阅实例名称 | 选择创建后命名,默认任务名称与任务 ID 一致。在订阅任务创建完成之后,可重新设置任务名称。 选择立即命名,在下面输入框,输入任务名称。 |
协议条款 |
3. 购买成功后,返回数据订阅列表,单击操作列的配置订阅对刚购买的订阅进行配置,配置完成后才可以进行使用。
4. 在配置数据订阅页面,选择数据订阅任务,完成后单击连通性测试,测试通过、设置网络后单击保存并下一步。
数据订阅任务设置
配置项 | 说明 |
实例类型 | 购买时选择的数据库类型,不可修改。 |
接入类型 | 当前仅支持源数据库为腾讯云数据库实例的场景,请选择“云数据库”。 |
云数据库实例 | 云数据库实例:源数据库的实例 ID。 支持选择只读/灾备实例,但推荐选择主实例,订阅服务对源库的压力非常小。 |
账号/密码 | 账号/密码:源数据库的账号、密码。 |
网络设置
配置项 | 说明 |
网络 | 请提前指定访问订阅任务 Kafka 的 VPC 环境(包括 VPC 和子网),后续可通过该 VPC 消费数据订阅服务。 说明: 同 VPC 访问:相同 VPC 下的所有 CVM 都可以正常访问订阅数据,无需额外配置。 跨 VPC 访问:如果消费端 CVM 在其他 VPC 中,需要配置云联网来实现跨 VPC 访问。 |
5. 在订阅类型和对象选择页面,选择订阅类型,单击保存并下一步。
配置项 | 说明 |
订阅类型 | 数据更新:订阅源库全部对象的数据更新,包括数据 INSERT、UPDATE、DELETE 操作。 结构更新:订阅源库全部对象的结构创建、修改和删除。 全实例:订阅源库全部对象的数据更新和结构更新。 |
Kafka 版本 | 显示 DTS 内置 Kafka 的版本,不可修改。 |
Topic 分区数量 | 设置数据投递到内置 Kafka 中 Topic 的分区数量,增加分区数量可提高数据写入和消费的速度。单分区可以保障消息的顺序,多分区无法保障消息顺序,如果您对消费到消息的顺序有严格要求,请选择分区数量为1。 |
Topic 分区策略 | 按表名分区:将相同表名的数据写入同一个分区中。 表名+主键分区:将相同主键的数据会写入同一个分区。适用于热点数据的表,可以将热表数据分散到不同分区中,提升并发消费效率。 |
6. 在预校验页面,预校验任务预计会运行2 - 3分钟,预校验通过后,单击启动完成数据订阅任务配置。
说明:
7. 单击启动后,订阅任务会进行初始化,预计会运行3 - 4分钟,初始化成功后进入运行中状态。
8. 新增消费组,数据订阅 Kafka 版支持用户创建多个消费组(单个订阅任务最多支持创建10个消费组),进行多点消费。数据订阅 Kafka 版消费依赖于 Kafka 的消费组,所以在消费数据前需要创建消费组。
9. 订阅实例进入运行中状态之后,就可以开始消费数据。Kafka 的消费需要进行密码认证,具体示例请参考数据消费 Demo,我们提供了多种语言的 Demo 代码,也对消费的主要流程和关键的数据结构进行了说明。