如何将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.mzph.cn/pingmian/51888.shtml

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

相关文章

stable-diffusion-xl-refiner-1.0

1.前言 这是一个基于Latent Diffusion的生成模型。它的主要功能是对通过SDXL 1.0 base模型生成的初始图像进行进一步的细化和去噪处理,以提升图像的质量和细节表现。这里的“refiner”模型是专门设计用来在最后的降噪步骤中改进图像的。 2.与SDXL 1.0 base模型的区别…

javascript之三元运算符

javascript三元运算符和c语言的很相似&#xff0c;语法格式都是 条件?代码1:代码2 等同于 if(条件) { 代码1 } else { 代码2 } 假如要制作一个输入两个数据&#xff0c;比较大小并输出最大数的网页 代码如下 <!DOCTYPE html> <html><head><…

C#实现国产Linux视频录制生成mp4

一. 技术方案 要完成这些功能&#xff0c;具体来说&#xff0c;需要解决如下几个技术问题&#xff1a; &#xff08;1&#xff09;麦克风数据采集。 &#xff08;2&#xff09;摄像头数据采集。 &#xff08;3&#xff09;音频数据编码。 &#xff08;4&#xff09;视频数…

低代码与AI:赋能企业数字化转型

引言 随着全球经济的快速发展和科技的飞速进步&#xff0c;数字化转型已成为各个行业和企业发展的重要趋势。数字化转型的背景不仅是提升效率和竞争力的手段&#xff0c;更是适应市场变化、满足客户需求的必由之路。 在当今信息化时代&#xff0c;技术的变革推动了企业运营方式…

嵌入式系统:全面解读与关键要点

嵌入式系统&#xff0c;这个看似专业而遥远的技术词汇&#xff0c;其实早已渗透进了我们日常生活的方方面面。从智能手机到家用电器&#xff0c;再到汽车中的电子控制系统&#xff0c;嵌入式系统无处不在。你是否好奇它们是如何工作的&#xff0c;又有哪些关键点值得我们关注&a…

【STM32 FreeRTOS】队列和缓冲区

队列简介 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制。 队列可以容纳有限数量的固定大小的数据项。一个队列可以容纳的最大项目数称为它的长度。 数据入队出队方式&#xff1a;队列通常用作先进先出&#xff08;FIFO&#xff09;缓冲区&#xff0c;其中数…

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具&#xff0c;可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API&#xff0c;数据可视化来显示…

html转vue项目

HTML是一种用于构建网页的标记语言&#xff0c;而Vue是一种用于构建用户界面的JavaScript框架。在HTML中使用Vue可以提供更加灵活和动态的用户界面功能。本文将介绍如何将HTML代码转换为Vue&#xff0c;并提供具体的代码示例。 首先&#xff0c;我们需要在项目中引入Vue框架。…

30. 串联所有单词的子串【 力扣(LeetCode) 】

一、题目描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words [“ab”,“cd”,“ef”]&#xff0c; 那么 “abcdef”&#xff0c;…

配置oss cdn加速静态资源访问 阿里云

效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页&#xff0c;找到并点击“对象存储 OSS” 创建存储空间&#xff08;Bucket&#xff09; 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…

thinkphp8 定时任务

在ThinkPHP8中创建定时任务通常涉及到Cron作业调度或者操作系统的定时任务功能&#xff08;如cronjob&#xff09;。以下是一个使用操作系统的cronjob的例子。 创建一个命令&#xff1a; // app/Command/ExampleCommand.php namespace app\Command;use think\console\Command; …

社群机器人的崛起:重塑社群管理的智慧未来

在数字化浪潮的推动下&#xff0c;社群作为连接人与人、促进信息交流与情感共鸣的桥梁&#xff0c;其重要性日益凸显。然而&#xff0c;随着社群规模的日益庞大和成员需求的多元化&#xff0c;传统的人工管理方式已难以满足高效、精准的管理需求。此时&#xff0c;社群机器人的…

P9750 [CSP-J 2023] 一元二次方程

[题目通道]([CSP-J 2023] 一元二次方程 - 洛谷) #include<bits/stdc.h> using namespace std; int T,m,a,b,c,d,k,t; int gcd(int a,int b){return b?gcd(b,a%b):a; } void kkksc03(){cin>>a>>b>>c;if(a<0)a-a,b-b,c-c;db*b-4*a*c,k1;if(d<0)…

Shell——读取命令read

在 Shell 编程中&#xff0c;read 命令用于从标准输入&#xff08;通常是键盘&#xff09;读取数据并将其存储在变量中。它非常适合用于交互式脚本&#xff0c;让用户能够输入数据。 基本用法 以下是 read 命令的基本用法&#xff1a; #!/bin/bashecho "请输入您的名字…

STM32 PWR电源控制 与 低功耗模式 详解

目录 STM32 PWR电源控制 与 低功耗模式 详解 1. PWR 电源控制 简介 2. PWR 电源控制 框图 3. 上电复位和掉电复位 与 可编程电压检测器&#xff08;PVD&#xff09; 3.1 内嵌复位与电源控制模块特性图 3.2 上电复位和掉电复位 3.3 可编程电压检测器&#xff08;PVD&…

微分方程(Blanchard Differential Equations 4th)中文版Section1.6

平衡点与相直线 给定一个微分方程 d y d t = f ( t , y ) , \frac{dy}{dt} = f(t, y), dtdy​=f(t,y), 我们可以通过绘制斜率场和勾勒图形来大致了解解的行为,或者使用欧拉法计算近似解。有时我们甚至可以推导出解的显式公式并绘制结果。所有这些技术都需要相当多的工作,无…

Python酷库之旅-第三方库Pandas(089)

目录 一、用法精讲 376、pandas.Series.list.flatten方法 376-1、语法 376-2、参数 376-3、功能 376-4、返回值 376-5、说明 376-6、用法 376-6-1、数据准备 376-6-2、代码示例 376-6-3、结果输出 377、pandas.Series.list.__getitem__魔法方法 377-1、语法 377-…

数据仓库: 3- ETL过程

目录 3- ETL过程3.1 数据抽取&#xff08;Extract&#xff09;3.1.1 数据抽取的挑战3.1.2 数据抽取的方式3.1.2.1 全量抽取3.1.2.2 增量抽取3.1.2.3 实时抽取 3.1.3 数据抽取的技术3.1.4 数据抽取工具3.1.5 总结 3.2 数据转换&#xff08;Transform&#xff09;3.2.1 定义3.2.2…

24.8.19学习笔记(MNIST,)

pytorch MNIST手写数字识别&#xff1a; import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms# 设定随机种子以保证结果可复现 torch.manual_seed(0)# 定义超参数 batch_size 32 learning_rate 0.001 num_epochs…

机器学习第十一章--特征选择与稀疏学习

一、子集搜索与评价 我们将属性称为 “特征”(feature&#xff09;&#xff0c;对当前学习任务有用的属性称为 “相关特征”(relevant feature&#xff09;、没什么用的属性称为 “无关特征”(irrelevant feature)&#xff0e;从给定的特征集合中选择出相关特征子集的过程&…