当前位置: 首页 > news >正文

使用DTS实现TiDB到GaiaDB数据迁移

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 数据库账号授权

数据库权限列表
源端 TiDBSELECT, SHOW VIEW
目标端 GaiaDBCREATE, 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 白名单。

  • 若您需要增量同步,则需进行以下配置:

0011865c1e073f471b00789a8eda2278.jpeg

TiDB2GaiaDB.png
    1. 部署 Pump 和 Drainer 组件,详情请参见 TiDB Binlog 集群部署。

    2. 修改 Drainer 组件的配置文件,设置输出为 Kafka,详情请参见 Kafka 自定义开发。

    3. 部署 Kafka 集群,您可以选择自建或使用百度智能云消息服务 for Kafka,详情参见创建消息服务 for Kafka

注意: 1. 当接入方式为专线接入时,请确保Kafka集群部署在专线接入相同的 VPC 内。2. 若选择百度智能云消息服务作为中转 Kafka,请在创建集群时确保将 网络配置>产品间转储 开关打开。

4.2 配置数据迁移

4.2.1 创建任务

首先,在创建任务界面配置数据传输任务的部分上下游连接信息,创建任务时支持源端/目标端位置选择自建数据存储和百度智能云数据库。

源端可根据数据源接入方式选择不同的接入类型:

接入类型:自建数据存储(公网)

31491b040f8567526377a32bc7162b27.jpeg
  • 接入类型:支持公网/BCC/BBC/DCC 自建 TiDB 实例。

  • 数据类型:固定选择 TiDB。

  • 地域:自建数据存储实例所在的百度智能云逻辑地域。

接入类型:自建数据存储(专线)

8c9cd43fc2b57048cf15ba05fd1c42a3.jpeg
  • 接入类型:支持专线接入 TiDB 实例。

  • 数据类型:固定选择 TiDB。

  • 地域:专线接入实例所在的百度智能云逻辑地域。

  • 专线接入所在网络:仅接入类型选择专线接入时存在。专线接入有三个可选项分别为:该地域的 VPC 列表、该地域的可用区列表、选定可用区对应的子网列表。VPC 列表中请选择专线所在的 VPC。

目标端接入类型可直接选择云原生数据库 GaiaDB:

接入类型:云原生数据库 GaiaDB

5466334b4bfab010f5df15d7e310301b.jpeg
  • 接入类型:支持云原生数据库 GaiaDB 实例。

  • 数据类型:固定选择 GaiaDB。

  • 地域:云原生数据库 GaiaDB 实例所在的百度智能云逻辑地域。

5ea1b272c712f6b3fd51a9c165afd74e.jpeg
  • 允许一键反向:开启后,可以支持割接后执行一键反向,一键建立反向回滚同步任务。

  • 链路规格:根据限流需求按需选择。

完成配置后点击【下一步】按钮完成创建任务,返回列表页。

4.2.2 配置任务

列表页点击任务操作栏右侧【配置任务】按钮进入配置任务界面。

ac6fad84fefa0b7be19e77c394ff0448.jpeg

4.2.2.1 连接信息配置

源端连接信息配置:

接入类型:自建数据存储(公网)

550a09a31b744202ef3c505cf0cd10ad.jpeg
  • 主机名/IP:公网接入时,需要填入 TiDB 实例的公网 IP,支持填写域名。

  • 端口:填入 TiDB 实例的端口。

  • 账号:填入 TiDB 实例的访问账号。

  • 密码:填入 TiDB 实例的访问密码。

  • 是否同步增量:若需要做增量同步,需要开启此选项,开启后需要填写 Kafka 连接信息,如下所示:

962698ae94eb1cc821c8774e607abf21.jpeg
  • 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 访问控制策略。

接入类型:自建数据存储(专线)

72073ce130f5bd1e45f828137af85879.jpeg
  • 主机名/IP:专线接入时,需要填入 TiDB 实例在百度智能云 VPC 内的 IP。

  • 端口:专线接入时,需要填入 TiDB 实例在百度智能云 VPC 内的端口。

  • 授权白名单:在源数据库的网络白名单中加入授权白名单 IP,确保源端可与该 IP 连通。

  • 账号:填入 TiDB 实例的访问账号。

  • 密码:填入 TiDB 实例的访问密码。

  • 是否同步增量:若需要做增量同步,需要开启此选项,开启后需要填写 Kafka 连接信息。

目标端连接信息配置:

接入类型:云原生数据库 GaiaDB

1997908aa76b72fea29b39543743e935.jpeg
  • 实例 ID:接入类型为云原生数据库 GaiaDB 时,表示云原生数据库 GaiaDB 的实例 ID。

完成配置后点击【授权白名单进入下一步】按钮,进入对象映射配置页。

4.2.2.3 对象映射

配置任务-对象映射界面 TiDB 版配置参数说明如下:

9e7b20a2a964059dbe56462ca6c8748b.jpeg
  • 迁移类型:支持结构迁移、全量迁移和增量同步,其中增量同步为必选。

  • 同步语句选择:增量同步阶段,支持指定需要同步的 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。

    • 手动选择:选择此选项时,将出现如下的库表选择页面,页面左侧会展示源端所有的库表信息,在页面左侧选择需要迁移的库表,库表信息将会被自动添加到页面右侧。点击右侧库表名旁的"编辑"按钮可以设置库表名映射、列名映射、行过滤、列过滤(白名单)、列过滤(黑名单)等功能;(注:"编辑"功能在一键反向任务中不可用)。

    • 模式匹配(在一键反向任务中,该选项不可用),详情可见:自定义迁移对象。

6a818c39266ffb83b88ecdb3744eff65.jpeg

完成配置后点击【保存并预检查】按钮,开始执行预检查。

4.2.3 预检查和启动任务

DTS 会在预检查阶段对任务配置及源端/目标端 MySQL 实例做检查,确认是否满足数据迁移需求。其中,检查结果分为四类:

74acbacec03a61779e692d5df22a7abf.jpeg
  • 失败:表示该检查项不通过,且严重影响数据迁移的正常执行。失败的检查项无法强制通过,建议您根据修复建议处理后重新预检查。

  • 警告:表示该检查项不通过,对数据迁移有一定负面影响。您可以确认后点击【强制通过】按钮强制通过检查。

  • 成功:表示该检查项通过。

  • 未开始:表示该检查项未开始执行。

若出现检查失败,您可以修改任务配置后重新执行预检查,或返回列表页后重新执行预检查。

43e0dfd1a96d9df9577cc7a17b11a196.jpeg

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

cc68c8849e33417f1515ce2ba4052bed.jpeg

4.3 执行数据校验

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

35fce279fe278a06e870736f71ee4d3e.jpeg

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

7c108b3d4985742a50dc06b8cd723e5d.jpeg b538d84cbe0e094cb44d6ad2f38f4a81.jpeg

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

81a6831df2f4fbee66c94ebed19e8ab0.jpeg 897aa584e184c94959b88af09306e0ea.jpeg

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支持

相关文章:

  • 从0开始学习mysql 第一节:mysql基础查询
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • 【开源】基于JAVA的人事管理系统
  • 国内首个openEuler师训营圆满结营!麒麟信安深化产教融合,助力培养国产操作系统高质量师资人才
  • SPN的重要性 | 保障服务安全和身份验证
  • 鸿蒙5.0发布时间已定!何处寻得移动开发加速器?
  • CWE、CVE
  • java中哈希家族底层原理
  • 扫码看文件效果怎么做?文件转成二维码能制作吗?
  • 写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)
  • PALWORLD linux centos7开服教程
  • 持续集成工具Jenkins的使用之安装篇(一)
  • vue和react的差异梳理
  • AWS认证SAA-C03每日一题
  • 【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • es6(二):字符串的扩展
  • ES6系统学习----从Apollo Client看解构赋值
  • Git 使用集
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Lucene解析 - 基本概念
  • react 代码优化(一) ——事件处理
  • 安卓应用性能调试和优化经验分享
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于游标的分页接口实现
  • 理清楚Vue的结构
  • 实现菜单下拉伸展折叠效果demo
  • 为视图添加丝滑的水波纹
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.ajax()参数及用法
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (搬运以学习)flask 上下文的实现
  • (二)正点原子I.MX6ULL u-boot移植
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (十六)一篇文章学会Java的常用API
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)编辑寄语:因为爱心,所以美丽
  • . NET自动找可写目录
  • .Family_物联网
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net6Api后台+uniapp导出Excel
  • @SuppressWarnings注解
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ]4817: [Sdoi2017]树点涂色