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

从TiDB迁移到OceanBase的实践分享

本文来自OceanBase热心用户的分享

近期,我们计划将业务数据库从TiDB迁移到OceanBase,但面临的一个主要挑战是如何更平滑的完成这一迁移过程。经过研究,了解到OceanBase提供的OMS数据迁移工具能够支持从TiDB到OceanBase的迁移,并且它还具有数据增量同步的功能,不过需要依赖Kafka的支持。为了确保迁移的顺利进行,我们提前进行了全面的测试,以验证整个数据同步的可行性。以下是我们的测试记录,供大家参考和讨论。

环境介绍

以下各种组件安装过程不详细说明,具体安装过程在各产品官方网站都有详细说明,后面只介绍具体的配置过程

TiDB环境

TiDB版本:v5.4.3

TiDB的部署是在一台单机上混部了TiDB Server、TiKV以及PD,TiCDC单节点部署在另外一台机器上

角色机器端口
TiDB Server172.24.255.704000
TiKV172.24.255.7020160
TiKV172.24.255.7020161
TiKV172.24.255.7020162
PD172.24.255.702379
TiCDC172.24.255.558300

1702608903

[root@OB3 bin]# ./cdc cli capture list --pd=http://172.24.255.70:2379
[{"id": "c0769fd8-78fa-4841-8103-586099d8fcf6","is-owner": true,"address": "172.24.255.55:8300"}
]
OceanBase环境

OceanBase版本:V4.2.0_CE

角色机器端口
OBServer172.24.255.562881
OBServer172.24.255.572881
OBServer172.24.255.582881
OBProxy172.24.255.562883
OBProxy172.24.255.572883

1702608921

Kafka环境

Kafka版本:3.1.0(TiCDC目前支持的最高版本是3.1.0版本)

Zookeeper版本:3.6.3

这里做测试,所以Kafka和zookeeper都是单机部署,没有采用集群部署,zookeeper用的是3.1.0版本自带的zookeeper,实际效果是一样的。

角色机器端口
Kafka:broker172.24.255.559092
zookeeper172.24.255.552181
[root@OB3 kafka]# ./bin/kafka-broker-api-versions.sh --bootstrap-server 172.24.255.55:9092 --version
3.1.0 (Commit:37edeed0777bacb3)
[root@OB3 bin]# ./zookeeper-shell.sh 172.24.255.55:2181 version
Connecting to 172.24.255.55:2181
ZooKeeper CLI version: 3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a, built on 04/08/2021 16:35 GMT

OMS环境

OMS版本:V4.1.1_CE

OMS采用的单节点部署

角色机器
OMS172.24.255.70

配置过程

创建TiCDC同步任务

TiCDC支持向mysql兼容、tidb以及Kafka中同步数据,这里因为需要OMS同步TiDB的增量数据,而增量数据是从Kafka中获取,因此需要创建TiCDC到Kafka的同步任务,创建示例如下:

./cdc cli changefeed create --pd=http://172.24.255.70:2379 \
--sink-uri="kafka://172.24.255.55:9092/test-topic?protocol=open-protocol&kafka-version=3.1.0&partition-num=1&max-message-bytes=67108864&replication-factor=1" \
--changefeed-id="simple-replication-task" --sort-engine="unified"

这条命令会在TiCDC中创建一个名字为simple-replication-task的同步任务,并且会在Kafka中创建一个名字为test-topic的topic。创建完成之后,会收到如下信息

Create changefeed successfully!
ID: simple-replication-task
Info: {"sink-uri":"kafka://172.24.255.55:9092/test-topic?protocol=open-protocol\u0026kafka-version=3.1.0\u0026partition-num=1\u0026max-message-bytes=67108864\u0026replication-factor=1","opts":{"max-message-bytes":"1048588"},"create-time":"2023-10-09T15:41:57.1669333+08:00","start-ts":444815721665658881,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":"","config":{"case-sensitive":true,"enable-old-value":true,"force-replicate":false,"check-gc-safe-point":true,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null,"protocol":"open-protocol","column-selectors":null},"cyclic-replication":{"enable":false,"replica-id":0,"filter-replica-ids":null,"id-buckets":0,"sync-ddl":false},"scheduler":{"type":"table-number","polling-time":-1},"consistent":{"level":"none","max-log-size":64,"flush-interval":1000,"storage":""}},"state":"normal","error":null,"sync-point-enabled":false,"sync-point-interval":600000000000,"creator-version":"v5.4.3"}

在Kafka中查看topic

[root@OB3 kafka]# bin/kafka-topics.sh --bootstrap-server 172.24.255.55:9092 --list
__consumer_offsets
test-topic

这里有的参数简单说明下:

  • --pd:指定TiCDC任务同步源端TiDC集群的pd信息
  • --changefeed-id:指定同步任务的ID,如果不指定会自动生成
  • --sink-uri:同步任务下游地址,需按照下面格式配置,目前 scheme 支持 mysql/tidb/kafka/pulsar:
    • [scheme]://[userinfo@][host]:[port][/path]?[query_parameters]
  • --sort-engine:指定 changefeed 使用的排序引擎。因 TiDB 和 TiKV 使用分布式架构,TiCDC 需要对数据变更记录进行排序后才能输出。该项支持 unified(默认)/memory/file:
    • unified:优先使用内存排序,内存不足时则自动使用硬盘暂存数据。该选项默认开启。
    • memory:在内存中进行排序。 不建议使用,同步大量数据时易引发 OOM。
    • file:完全使用磁盘暂存数据。已经弃用,不建议在任何情况使用。
  • 其他包括:--start-ts、--target-ts、--config配置,具体可参考官网,这里不过多介绍,本次同步任务也未用到。

实际同步到下游配置,是通过sink-uri决定,这里再简单说明下sink-uri中参数含义,在这次创建的任务中--sink-uri参数内容如下:

--sink-uri="kafka://172.24.255.55:9092/test-topic?protocol=open-protocol&kafka-version=3.1.0&partition-num=1&max-message-bytes=67108864&replication-factor=1"

参数解析
172.24.255.55下游 Kafka 对外提供服务的 IP
9092下游 Kafka 的连接端口
topic-name变量,使用的 Kafka topic 名字,这里使用test-topic
kafka-version下游 Kafka 版本号(可选,默认值 2.4.0,目前支持的最低版本为 0.11.0.2,最高版本为 3.1.0)
partition-num下游 Kafka partition 数量
max-message-bytes每次向 Kafka broker 发送消息的最大数据量(可选,默认值 10MB)
replication-factorKafka 消息保存副本数(可选,默认值 1)
protocol输出到 Kafka 的消息协议,可选值有 canal-json、open-protocol、canal、avro、maxwell
  • 除了上面这些配置,另外还有加密等配置,这里没有使用加密方式。

另外,OMS 社区版仅支持 TiCDC Open Protocol,不支持其它协议,因此在sink-uri中指定protocol时,必须制定protocol=open-protocol

在以上创建完成之后,在TiDB中创建表并插入数据

MySQL [test]> create table test_table(id int primary key, name varchar(20));
Query OK, 0 rows affected (0.08 sec)MySQL [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test_table     |
+----------------+
1 row in set (0.00 sec)MySQL [test]> insert into test_table values(1,'OceanBase');
Query OK, 1 row affected (0.00 sec)

可以在Kafka中看到增量信息

[root@OB3 kafka]# ./bin/kafka-console-consumer.sh --bootstrap-server 172.24.255.55:9092 --topic test-topic
Q{"q":"CREATE TABLE `test_table` (`id` INT PRIMARY KEY,`name` VARCHAR(20))","t":3}
Q{"u":{"id":{"t":3,"h":true,"f":11,"v":1},"name":{"t":15,"f":64,"v":"OceanBase"}}}

OMS创建数据源

OMS上创建数据源时,需要创建两个数据源,一个是Kafka的,一个是TiDB的,在配置TiDB数据源时,需要关联Kafka数据源,因此这里先创建Kafka数据源。

Kafka数据源

进入到OMS数据源管理页面,新建数据源,选择Kakfa数据源,因为这里未使用SSL和认证,所以取消勾选,填写完成之后测试连接,连接成功之后确定即可添加成功。

1702608947

TiDB数据源

同样进入到新建数据源页面,选择TiDB数据源,填写对应的信息,同时绑定Kafka,然后关联上一步创建的Kafka即可,选择创建好的test-topic,然后进行连接测试,测试成功之后确定即可添加TiDB数据源

1702608982

OceanBase数据源

方式基本相同

1702609002

OMS创建迁移任务

在OMS数据迁移页面,点击创建迁移项目,输入项目名称,源和目标之后,点击下一步

1702609029

根据需求选择同步任务配置,这里勾选结构迁移、全量迁移、增量同步(Insert、Update、Delete)以及全量校验,注意这里不支持DDL同步,然后点击下一步

1702609058

选择要同步的对象,这里可以直接指定对象,也可以选择匹配规则。我直接用了匹配规则,test库下所有对象都同步,然后点击校验,预览对象,因为目前TiDB的test库下只有test_table这张表,因此可以看到最终对象这里只显示了test_table,然后继续点击下一步

1702609083

配置迁移选项,这里选择同步和校验的速率,速率越高,对资源的消耗越大。另外有高级配置中,目标端表对象存在记录时处理策略,以及是否允许索引后置,索引后置指OMS在完成对应表全量数据迁移、同步后创建非唯一键的索引,配置完成之后,进行预检查

1702609112

预检查如果失败,需要检查失败原因,另外对于一些告警,也建议进行修复下,然后再开始同步任务。确认无误之后启动项目即可。

1702609134

任务启动之后,会先进行全量迁移,即将原表中已有数据先迁移过来,完成之后会继续执行增量同步任务。

1702609162

同步测试

在TiDB端执行insert、update、delete操作,可以看到在OceanBase端同步成功。

1702609185

另外在OMS上可以看到变更的统计信息

1702609206

相关文章:

从TiDB迁移到OceanBase的实践分享

本文来自OceanBase热心用户的分享 近期,我们计划将业务数据库从TiDB迁移到OceanBase,但面临的一个主要挑战是如何更平滑的完成这一迁移过程。经过研究,了解到OceanBase提供的OMS数据迁移工具能够支持从TiDB到OceanBase的迁移,并且…...

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分,近年来得到了广泛应用。然而,随着光伏电站规模的扩大,光伏组件在运行过程中可能会出现各种故障,如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率,还可能导致更…...

CICD流水线

一、CICD流水线简介 CICD概念 CI/CD流水线是现代软件开发的一个核心概念,它涉及自动化和管理软件从开发到部署的整个生命周期 概念定义 具体有三点:持续集成、持续交付、持续部署 流水线组成为:代码提交、测试、构建、部署、结果通知 二…...

Sass/Scss基础

安装sass npm install -g sass Sass/Scss释义 ASS版本3.0之前的后缀名为.sass,而版本3.0之后的后缀名.scss。 Sass (Syntactically Awesome Stylesheets) 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言。 Sass 是一个由buby语言编…...

【sx sb sz】Centos/Linux sx、sb、sz命令详细介绍

简介 系统版本:Centos7.6 软件版本:lrzsz 0.12.20 sx、sb、sz命令属于lrzsz程序的内容,是使用纠错协议(ZMODEM、YMODEM、XMODEM)通过拨号串行端口将一个或多个文件发送到在 PC-DOS、CP/M、Unix、VMS 及其他操作系统下运…...

【网络层】IP报文解析和网段划分

文章目录 网络层的作用IP协议协议报头格式网段划分DHCPCIDR划分方案 IP地址的数量限制私有IP地址和公网IP地址LAN和WAN 路由 网络层的作用 前面学习了应用层和传输层,应用层的作用是为用户和应用程序提供网络服务,传输层的作用是提供端口到端口的通信服…...

[GXYCTF2019]禁止套娃1

打开题目 进行常规的检测漏洞&#xff0c;扫描目录发现存在.git文件夹下的文件存在 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])) { if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\…...

人工智能时代,数字化工厂如何改革?提升竞争力?

在人工智能时代&#xff0c;数字化工厂通过数据驱动的决策、智能制造、柔性生产、物联网整合以及人机协作&#xff0c;实现生产效率和产品质量的全面提升&#xff0c;并不断创新以保持竞争力。 --题记 在人工智能时代&#xff0c;数字化工厂的改革…...

气膜建筑的抗风与防火性能:保障仓储的安全—轻空间

气膜建筑以其独特的结构和材料优势&#xff0c;为仓储设施提供了可靠的安全保障。在应对自然灾害特别是强风和火灾时&#xff0c;气膜建筑展示了优异的抗风和防火性能。轻空间将详细探讨这些性能及其在实际应用中的表现。 气膜建筑的抗风能力源于其特殊的结构设计和高性能材料。…...

【秋招笔试】2024-08-07-YT游戏(研发岗)-三语言题解(CPP/Python/Java)

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的题目比较典,…...

【Python知识】m.inplace = inplace 《==》是否执行原地操作

# 如果激活层模块有 inplace 属性&#xff0c;则设置该属性 if hasattr(m, inplace): m.inplace inplace inplace 属性是什么&#xff1f; 在 PyTorch 中&#xff0c;inplace 属性是一个布尔值&#xff0c;用于指示某个操作是否可以以原地&#xff08;in-place&#xff09;模式…...

Go语言fmt包中print相关方法

Go语言的fmt包提供了多种打印相关的函数&#xff0c;主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print相关方法的用途和区别&#xff1a; 1.fmt.Print() 功能: fmt.Print() 将参数的内容按默认格式输出到标准输出&#xff08;通常是控制台&#xff…...

图片转为pdf怎么弄?亲测有效的8个pdf转换方法安利

图片转PDF怎么弄&#xff1f;在日常的办公生活中&#xff0c;我们经常会需要处理一些文档格式转换难题&#xff0c;图片转成PDF格式就是其中一个&#xff0c;图片转换成PDF格式的话&#xff0c;方便我们传输分享&#xff0c;毕竟现在PDF格式凭借着自身的稳定性和可移植性已经成…...

贪吃蛇(使用QT)

贪吃蛇小游戏 一.项目介绍**[贪吃蛇项目地址](https://gitee.com/strandingzy/QT/tree/zyy/snake)**界面一&#xff1a;游戏大厅界面二&#xff1a;关卡选择界面界面三&#xff1a;游戏界面 二.项目实现2.1 游戏大厅2.2关卡选择界面2.3 游戏房间2.3.1 封装贪吃蛇数据结构2.3.2 …...

【案例40】Apache中mod_proxy模块的使用

NC中间件 应用场景&#xff1a;配置了apache的情况&#xff0c;包括uap集群&#xff0c;配置https等场景下均适用&#xff1b;如果是单机&#xff08;NC单结点情况不存在问题&#xff0c;则不用配置这项; was环境也不用配置此项。&#xff09; 解决方案&#xff1a;按如下两…...

简单安装Android Studio并使用

在Windows上安装Android Studio的步骤如下&#xff1a; ### 1. 检查系统要求 确保你的计算机符合Android Studio的系统要求&#xff0c;通常包括&#xff1a; - Windows 8/10/11 - 64位处理器 - 最少4 GB RAM&#xff08;推荐8 GB&#xff09; - 最少2 GB可用硬盘空间&#xff…...

在Python中,模块(Module)和包(Package)

在Python中&#xff0c;模块&#xff08;Module&#xff09;和包&#xff08;Package&#xff09;是组织代码、提高代码复用性、促进代码维护的两种重要机制。它们各自扮演着不同的角色&#xff0c;但又紧密相连&#xff0c;共同构成了Python程序架构的基础。以下将详细阐述Pyt…...

Node版本管理工具

一、nvm 安装 二、常用命令 nvm v //查看nvm 版本号nvm install latest // 下载最新的 node 版本 nvm install 版本号 //安装node对应的版本nvm uninstall 版本号 //卸载对应的版本nvm list // 查看下载的所有版本的nodenvm use 版本号 // 只有引入了才能使用…...

创建并发布NPM模块

创建模块项目 $ mkdir my-npm-package $ cd my-npm-package $ npm init添加模块代码 创建新文件 index.js&#xff0c;内容如下 function helloworld() {console.log(Hello World!); }module.exports helloworld;测试模块 在模块目录&#xff08;my-npm-package&#xff0…...

20240807软考架构-------软考31-35答案解析

每日打卡题31-35答案 31、【2015年真题】 难度&#xff1a;一般 对于遗留系统的评价框架如下图所示&#xff0c;那么处于“高水平、低价值”区的遗留系统适合于采用的演化策略为 &#xff08; )。 A&#xff0e;淘汰B&#xff0e;继承C&#xff0e;改造D&#xff0e;集成 答案…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...