1 概览
本文主要介绍通过 DTS 数据迁移功能,结合消息服务 for Kafka 与 TiDB 数据库的 Pump、Drainer 组件,完成从TiDB迁移至百度智能云云原生数据库 GaiaDB。
消息服务 for Kafka:详细介绍参见:消息服务 for Kafka 产品介绍
百度智能云云原生数据库GaiaDB:详细介绍参见:云原生数据库 GaiaDB
2 需求场景
适用于使用百度智能云数据传输服务 DTS(以下简称 DTS),将 TiDB 数据库实例的数据,通过公网/专线迁移到目标端 GaiaDB 实例中。
3 方案概述
3.1 迁移前置条件
已创建作为迁移源端的 TiDB 实例。
已创建作为迁移目标端的 GaiaDB 实例。
3.2 数据库账号授权
数据库 | 权限列表 |
---|---|
源端 TiDB | SELECT, SHOW VIEW |
目标端 GaiaDB | CREATE, CREATE ROUTINE, CREATE VIEW, ALTER, ALTER ROUTINE, SELECT, INSERT, UPDATE, DELETE, DROP, INDEX |
3.3 注意事项
DTS 在执行全量迁移时将占用源库和目标库一定的资源,可能会导致数据库负载上升。如果数据库业务量较大或服务器规格较低,可能会加重数据库压力,甚至导致数据库服务不可用。建议您在执行数据同步前谨慎评估,在业务低峰期执行数据同步。
如果源库中待迁移的表没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
4 配置步骤
4.1 准备工作
如果 TiDB 数据库具有白名单限制访问,您需要将 DTS 服务器IP地址加入 TiDB 白名单中。详情参见 DTS 授权 IP 白名单。
若您需要增量同步,则需进行以下配置:
-
部署 Pump 和 Drainer 组件,详情请参见 TiDB Binlog 集群部署。
修改 Drainer 组件的配置文件,设置输出为 Kafka,详情请参见 Kafka 自定义开发。
部署 Kafka 集群,您可以选择自建或使用百度智能云消息服务 for Kafka,详情参见创建消息服务 for Kafka
注意: 1. 当接入方式为专线接入时,请确保Kafka集群部署在专线接入相同的 VPC 内。2. 若选择百度智能云消息服务作为中转 Kafka,请在创建集群时确保将 网络配置>产品间转储 开关打开。
4.2 配置数据迁移
4.2.1 创建任务
首先,在创建任务界面配置数据传输任务的部分上下游连接信息,创建任务时支持源端/目标端位置选择自建数据存储和百度智能云数据库。
源端可根据数据源接入方式选择不同的接入类型:
接入类型:自建数据存储(公网)

接入类型:支持公网/BCC/BBC/DCC 自建 TiDB 实例。
数据类型:固定选择 TiDB。
地域:自建数据存储实例所在的百度智能云逻辑地域。
接入类型:自建数据存储(专线)

接入类型:支持专线接入 TiDB 实例。
数据类型:固定选择 TiDB。
地域:专线接入实例所在的百度智能云逻辑地域。
专线接入所在网络:仅接入类型选择专线接入时存在。专线接入有三个可选项分别为:该地域的 VPC 列表、该地域的可用区列表、选定可用区对应的子网列表。VPC 列表中请选择专线所在的 VPC。
目标端接入类型可直接选择云原生数据库 GaiaDB:
接入类型:云原生数据库 GaiaDB

接入类型:支持云原生数据库 GaiaDB 实例。
数据类型:固定选择 GaiaDB。
地域:云原生数据库 GaiaDB 实例所在的百度智能云逻辑地域。

允许一键反向:开启后,可以支持割接后执行一键反向,一键建立反向回滚同步任务。
链路规格:根据限流需求按需选择。
完成配置后点击【下一步】按钮完成创建任务,返回列表页。
4.2.2 配置任务
列表页点击任务操作栏右侧【配置任务】按钮进入配置任务界面。

4.2.2.1 连接信息配置
源端连接信息配置:
接入类型:自建数据存储(公网)

主机名/IP:公网接入时,需要填入 TiDB 实例的公网 IP,支持填写域名。
端口:填入 TiDB 实例的端口。
账号:填入 TiDB 实例的访问账号。
密码:填入 TiDB 实例的访问密码。
是否同步增量:若需要做增量同步,需要开启此选项,开启后需要填写 Kafka 连接信息,如下所示:

Kafka 版本:选择 Kafka 版本号。
Kafka Broker:填入 Kafka Broker,支持格式 IP:端口,IP 与端口以英文冒号分隔,多个地址以英文逗号分隔,如 192.168.1.1:9092,192.168.1.2:9093。
Kafka Topic:填入 Kafka Topic 名称,Topic 需要提前创建好。
Kafka 消息格式:填入 Kafka 消息格式,当前仅支持 "tidb-binlog" 格式。
Kafka 访问控制:填写 kafka 访问控制策略。
接入类型:自建数据存储(专线)

主机名/IP:专线接入时,需要填入 TiDB 实例在百度智能云 VPC 内的 IP。
端口:专线接入时,需要填入 TiDB 实例在百度智能云 VPC 内的端口。
授权白名单:在源数据库的网络白名单中加入授权白名单 IP,确保源端可与该 IP 连通。
账号:填入 TiDB 实例的访问账号。
密码:填入 TiDB 实例的访问密码。
是否同步增量:若需要做增量同步,需要开启此选项,开启后需要填写 Kafka 连接信息。
目标端连接信息配置:
接入类型:云原生数据库 GaiaDB

实例 ID:接入类型为云原生数据库 GaiaDB 时,表示云原生数据库 GaiaDB 的实例 ID。
完成配置后点击【授权白名单进入下一步】按钮,进入对象映射配置页。
4.2.2.3 对象映射
配置任务-对象映射界面 TiDB 版配置参数说明如下:

迁移类型:支持结构迁移、全量迁移和增量同步,其中增量同步为必选。
同步语句选择:增量同步阶段,支持指定需要同步的 SQL 语句类型,可多选。
特殊 DDL 过滤:增量同步阶段,在选择了同步 DDL 语句的情况下,支持过滤。
自定义同步位点:当未选择结构迁移和全量迁移,仅选择了增量同步时,可以指定增量同步的起始位点,DTS 支持选择两种起始位点。详情可见:自定义同步位点。
offset:以 Kafka Topic 消息日志的偏移量作为起始位点,格式参考:100;
commitTs:以 TiDB 事务的提交时间点作为起始位点,格式参考:426164827296890882;
限制传输速度:全量迁移和增量同步阶段更细粒度的限流策略,支持按照每秒迁移的行数和每秒迁移的数据量限制任务的传输速度。详情可见:迁移限速。
重试时间:源端/目标端实例无法连接后自动重试,用户可根据实际情况调整重试时间,或者在源端和目标端的实例释放后尽快释放 DTS 实例。
同步 Online DDL:指定是否同步由 gh-ost, pt-osc、DMS 工具执行的表结构变更操作。详情可见:同步 Online DDL。
传输对象:DTS 支持三种配置传输对象方式。
整个实例:将源端除系统库外的所有数据迁移到目标端,不迁移的系统库为:mysql、sys、information_schema、performance_schema。
手动选择:选择此选项时,将出现如下的库表选择页面,页面左侧会展示源端所有的库表信息,在页面左侧选择需要迁移的库表,库表信息将会被自动添加到页面右侧。点击右侧库表名旁的"编辑"按钮可以设置库表名映射、列名映射、行过滤、列过滤(白名单)、列过滤(黑名单)等功能;(注:"编辑"功能在一键反向任务中不可用)。
模式匹配(在一键反向任务中,该选项不可用),详情可见:自定义迁移对象。

完成配置后点击【保存并预检查】按钮,开始执行预检查。
4.2.3 预检查和启动任务
DTS 会在预检查阶段对任务配置及源端/目标端 MySQL 实例做检查,确认是否满足数据迁移需求。其中,检查结果分为四类:

失败:表示该检查项不通过,且严重影响数据迁移的正常执行。失败的检查项无法强制通过,建议您根据修复建议处理后重新预检查。
警告:表示该检查项不通过,对数据迁移有一定负面影响。您可以确认后点击【强制通过】按钮强制通过检查。
成功:表示该检查项通过。
未开始:表示该检查项未开始执行。
若出现检查失败,您可以修改任务配置后重新执行预检查,或返回列表页后重新执行预检查。

预检查通过后,您可直接启动数据迁移任务。

4.3 执行数据校验
在列表页观察到正向数据流进入复制变更阶段,且延迟追平。

可以点击任务 ID 进入任务详情页。选择右侧数据一致性校验,点击【创建一致性校验】按钮后,可根据需要调整数据校验配置。完成后点击【确定】按钮,启动数据校验。


执行完成的数据校验任务状态为任务结束,您可以点击【查看详情】查看数据校验详情,可以看到校验结果和数据不一致统计。对校验结果的详细解释可见:创建数据校验任务


5 DTS 支持迁移的 TiDB 数据类型
TiDB数据类型 | DTS是否支持 |
---|---|
BOOLEAN | 支持 |
TINYINT | 支持 |
SMALLINT | 支持 |
MEDIUMINT | 支持 |
INT | 支持 |
BIGINT | 支持 |
DECIMAL | 支持 |
FLOAT | 支持 |
DOUBLE | 支持 |
BIT | 支持 |
YEAR | 支持 |
DATE | 支持 |
TIME | 支持 |
DATETIME | 支持 |
TIMESTAMP | 支持 |
CHAR | 支持 |
VARCHAR | 支持 |
BINARY | 支持 |
VARBINARY | 支持 |
TINYTEXT | 支持 |
TEXT | 支持 |
MEDIUMTEXT | 支持 |
LONGTEXT | 支持 |
TINYBLOB | 支持 |
BLOB | 支持 |
MEDIUMBLOB | 支持 |
LONGBLOB | 支持 |
SET | 支持 |
ENUM | 支持 |
JSON | 支持 |