如何将MySQL迁移到TiDB,完成无缝业务切换?

当 MySQL 数据库的单表数据量达到了亿级,会发生什么?

这个现象表示公司的业务上了一个台阶,随着数据量的增加,公司规模也进一步扩大了,是非常喜人的一个改变 ,然而随之而来的其他变化,就没那么讨喜了。

首先,你会发现 MySQL 数据库的查询性能下降明显,单个查询的响应时间更久了。虽然索引有点帮助,但是数据量越大,索引也会越来越大,查找索引的开销也在增加。

紧接着,由于表太大,表结构的维护操作会变得很困难,一个 DDL 操作将耗费很久的时间,同时造成的锁表会给业务带来很大的影响。

再然后,存储空间吃紧了,亿级数据量的单表可不是吃素的,正常情况下,文件大小能达到数百个 GB 乃至数 TB。

更重要的是,针对大表所在数据库的单点写入会使其所在服务器到达性能瓶颈,举个例子,淘宝在双十一的高峰期每秒会有几百万笔订单的写入 ,这对 CPU、内存以及磁盘 I/O 都将造成非常大的压力,最终导致业务响应缓慢。

由于 MySQL 主要依赖垂直扩展来提升性能以及存储,你就需要不停地堆叠硬件配置来满足业务需求,随之而来的,就是数据库成本的大幅增加以及与支出不成正比的微弱收益。

当面临这种状况的时候,分库分表是个好办法,把一个表的数据分别存在不同的数据库实例中,这能解决大部分数据处理的难题,但却引入了新的复杂性,对运维和开发都造成了不小的挑战。

那有没有什么低成本且效率高的解决方案?当然有!用 TiDB 就能完美解决这些问题。

TiDB 是啥?

TiDB 是一款开源的分布式关系型数据库管理系统,由PingCAP开发,旨在解决传统关系型数据库在扩展性和灵活性上的局限。它有很多的优点:

  • TiDB 是开源产品:TiDB 具有一个相当成熟的社区,并且具有相当数量并持续增长的代码贡献者,这使 TiDB 的成熟度越来越高。

  • 兼容 MySQL 生态:TiDB 兼容 MySQL 协议和大部分 MySQL 的 SQL 语法,应用程序只需要做少量的改动甚至不需要改动即可运行在 TiDB 上。

  • 强大的可扩展性:TiDB 是一个分布式数据库,有着非常好的读、写扩展性,尤其是写扩展性,可以存储海量的数据,数百 TB 数据轻松存储。

  • 存算分离架构:使用户可以单独为计算资源或存储资源进行扩容,避免其中一方资源的浪费。

  • HTAP 能力:OLTP 和 OLAP 能力相融合,提供 HTAP 的混合负载能力,赋予 TiDB 强大的业务处理能力和数据查询能力。

  • 在线扩缩容与升级:在 TiDB 的存算分离架构下,数据库的扩缩容和升级再也不用停机了,对于长期在线的业务系统来说尤为重要。

这些特性让快要被撑爆的 MySQL 有了近乎完美的解决方案,我们只需要把 MySQL 完整迁移到 TiDB 就行了。这里我们需要用到 NineData 来完成这个工作,NineData 的数据复制能力可以轻松地在同、异构数据源之间进行数据传输,并且具备如下优秀的特性:

1. 迁移过程业务不停机

NineData 提供结构迁移、全量数据迁移及增量数据迁移能力。在数据库迁移过程中,源端可正常提供服务。NineData 可自动完成结构迁移、全量数据迁移,并自动启动 Binlog 的实时监听、采集、解析及复制能力,源端的增量更新数据会被实时复制到目标中。当 NineData 进入到增量数据迁移阶段且复制无延迟时,业务可以在 MySQL 中进行只读验证,并借助 NineData 数据对比工具进行数据一致性验证。业务验证通过后,可进行业务停机切换,整个迁移过程业务停机时间非常短。

2. 强劲的复制性能

在数据库迁移过程中,迁移速度无疑是影响业务能否成功切换割接的重要因素。在此过程中,NineData 针对 MySQL > TiDB 数据复制进行深度性能优化,基于日志分析、智能分片、动态攒批、数据合并、特有数据格式等技术,有效保障全量数据复制、增量数据复制的性能。当前 NineData 全量复制性能高达 200 GB/小时,增量数据复制性能高达 2 万记录/秒。

3. 完善的数据质量保障方案

NineData 提供了多种数据一致性校验方案,包括全量精准校验、快速验及增量校验,可以对迁移数据进行数据一致性强验证。同时,当出现数据不一致时,能够提供一键修复能力。基于 NineData 数据一致性校验能力,可以有效规避因数据质量导致的业务迁移故障。

下面,就手把手教你如何用 NineData 进行迁移。

步骤一:录入源和目标数据源

1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要录入的数据源。

2. 根据页面提示进行配置,然后单击创建数据源完成创建。

步骤二:配置同步链路

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制

2. 根据页面提示配置复制任务,由于我们想要实现不停机实时数据迁移,需要在复制类型处额外勾选增量复制

3. 配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时迁移 MySQL 中新增的增量数据,所有新写入的数据都将一条不漏地同步到 TiDB,每当目标端的增量数据追平源端时,任务面板中的延迟在零点几秒或几秒之间徘徊时,代表当前 TiDB 中的数据已是最新的。

步骤三(可选):校验目标端同步数据的完整性

除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

2. 单击数据对比页签,即可展示对比结果(如果步骤二的任务配置中未勾选开启数据一致性对比,则此处还需要单击开启数据对比)。

3. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。

步骤四(可选):配置任务异常告警

由于数据量过于庞大,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。

1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

2. 单击右上角的配置告警

3. 输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。

最后

完成了迁移之后,就可以进行一系列的测试,以确保应用程序能够完全兼容 TiDB ,由于 TiDB 本身对于 MySQL 协议的高度兼容性,业务几乎可以无缝从 MySQL 衔接至 TiDB。但事无绝对,测试到 TiDB 没能很好地兼容应用程序,也不用担心,NineData 提供的不停机迁移可以保证业务的连续性,迁移过程完全不会对业务造成任何影响。

至于有些同学关心的费用问题,首先 TiDB 是开源的,NineData 的全量迁移也是完全免费的,还赠送一条增量迁移服务,以实现本文中介绍的不停机迁移,因此从 MySQL 迁移到 TiDB 的过程不会产生费用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405164.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第354题俄罗斯套娃信封问题

题目: 题解: class Solution:def maxEnvelopes(self, envelopes: List[List[int]]) -> int:if not envelopes:return 0n len(envelopes)envelopes.sort(keylambda x: (x[0], -x[1]))f [1] * nfor i in range(n):for j in range(i):if envelopes[j]…

全液冷服务器革命:CPU、内存、PCIe高效散热新方案

在国家十四五规划大力发展数字经济的背景下,数据中心作为算力的核心载体,其基础设施成为支撑数字经济的“数字底座”,但同时也面临巨大的碳排放压力。随着芯片与服务器功耗的上升,单机柜功率密度不断增大,传统风冷散热…

深度学习设计模式之享元设计模式

文章目录 前言一、介绍二、特点三、详细介绍1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 享元设计模式主要用于减少创建对象的数量,以减少内存占用,提高性能。 一、介绍 享元设计模式(Flyweight Pattern)是一种…

Hexo通过GitHub设置自定义域名

本身GitHub也是支持自定义域名的,本次教程将讲解如何使用GitHub自带的自定义域名解析。 1. GitHub设置 1.1 登录GitHub账号 登录GitHub账号,找到名称为 用户名.github.io的仓库,并点击进入。 1.2 进入Settings页面 点击如图的Settings按…

【体检】程序人生之健康检查,全身体检与预防疫苗,五大传染病普筛,基因检测等

程序员养生指南之 【体检】程序人生之健康检查,全身体检项目分类,五大传染病普筛,基因检测等 文章目录 一、全身体检与预防疫苗(年检)1、实验室检测:生化全套检查2、医技检查:辅助诊疗科室3、科…

python中使用gurobi遇到强不等式约束(只有大于或者小于而不是大于等于或者小于等于的形式)的解决办法

文章目录 情况分析与解决思路数学模型严格不等式约束转化后的约束形式带入具体的 ϵ \epsilon ϵ 值 python代码总结 情况分析与解决思路 在gurobi求解数学优化问题时&#xff0c;标准的约束形式通常是大于等于&#xff08; >&#xff09;或小于等于&#xff08;<&…

Linux:网络基础概念

网络发展 独立模式: 计算机之间相互独立; 网络互联: 多台计算机连接在一起, 完成数据共享; 局域网 LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 广域网 WAN: 将远隔千里的计算机都连在一起; 所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如…

如何使用DEV-C++做游戏?

我的B站视频做过关于python的小游戏开发&#xff0c;但很多小伙伴希望通过C做一些有趣的动画或游戏&#xff0c;该怎么实现呢&#xff1f; B站&#xff1a;bigbigli_大李 大家好&#xff0c;我是大李。 今天主要跟大家谈谈如何通过C做一些小游戏开发&#xff0c;这里我们就 使用…

【游戏】什么是摄影游戏(Photography Games)

“Photography games” 是指以摄影为主题或核心机制的电子游戏。这类游戏通常让玩家通过虚拟摄像头或相机捕捉游戏世界中的场景、人物、动物或物品。这些游戏可以有不同的玩法和目标&#xff0c;通常包括以下几种类型&#xff1a; 探索与拍摄&#xff1a;玩家在游戏世界中自由…

嵌入式学习Day36---Linux软件编程---网络编程

目录 一、TCP并发模型 1.1.阻塞IO 1.2.非阻塞IO 1.步骤 2.函数接口 3.实例 1.3.异步IO 1.步骤 2.函数接口 3.实例 1.4.多路复用IO 1.select 函数接口&#xff1a; 实例 2.poll 3.epoll 二、总结 一、TCP并发模型 1.1.阻塞IO CPU占用率低,等待资源时将任务挂…

如何查看Squid的DNS缓存

使用squidclient mgr:ipcache命令查看Squid的DNS缓存记录 如果squid端口不是3128, 需要指定端口号, squidclient -p {port} mgr:ipcache # squidclient mgr:ipcache ... IP Cache Statistics: ... IP Cache Contents:Hostname Flg lstref TTL N(b)…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

vscode提升:JSON 中不允许有注释

解决方案 &#xff1a; 运行&#xff1a; json with comment 参考链接&#xff1a; https://blog.csdn.net/eqizhihui/article/details/134014010 人工智能学习网站 https://chat.xutongbao.top

音视频相关知识

H.264编码格式 音频 PCM就是要把声音从模拟信号转换成数字信号的一种技术&#xff0c;他的原理简单地说就是利用一个固定的频率对模拟信号进行采样。 pcm是无损音频音频文件格式 每秒15帧 一秒钟300kb 单位&#xff1a;像素

K8S的统一访问入口-Service

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

金山云Q2调整后EBITDA率提升至3.2% 高质量发展驱动经营质效双增

8月20日&#xff0c;金山云公布了2024年第二季度业绩。 季度内&#xff0c;金山云整体业绩延续向好态势&#xff0c;实现收入规模、盈利能力、经营现金流的联动共赢。财报显示&#xff0c;金山云Q2营收18.9亿元&#xff0c;公有云实现收入12.3亿元&#xff0c;行业云实现收入6…

GATK ReadLikelihoodCalculationEngine接口介绍

ReadLikelihoodCalculationEngine 是 GATK&#xff08;Genome Analysis Toolkit&#xff09;中的一个接口&#xff0c;用于计算不同等位基因&#xff08;haplotypes 或 alleles&#xff09;下的测序读数的似然值。这些似然值在变异检测过程中起着关键作用&#xff0c;帮助确定哪…

【C++ 第十四章】红黑树

前言&#xff1a; 学习本章&#xff0c;需要先学习 AVL树的 旋转&#xff0c;因为 红黑树也需要旋转调整来平衡&#xff0c;下面讲解将不赘述 旋转的原理和操作 红黑树的旋转 和 AVL树的旋转 唯一不同的是&#xff1a;旋转的判断使用逻辑 AVL树的旋转 可以通过 平衡因子 判断…

第3章处理机调度与死锁

一、处理机调度的层次和调度算法的目标 调度的实质是一种资源分配&#xff0c;处理机调度是对处理机资源进行分配。 1. 处理机调度的层次 (1)高级调度(作业调度)。 (2)中级调度(内存调度)。 (3)低级调度(进程调度)。 2. 处理机调度算法的目标 (1)资源利用率。 (2)公平性。 (3)平…

csrf漏洞(三)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文依靠phpstudy以及dvwa靶场进行操作&#xff0c;具体搭建流程参考&#xff1a;xss漏洞&#xff08;二&#xff0c;xss靶场搭建以及简单利用&#xff09; 前篇…