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

如何将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 的过程不会产生费用。

相关文章:

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

当 MySQL 数据库的单表数据量达到了亿级,会发生什么? 这个现象表示公司的业务上了一个台阶,随着数据量的增加,公司规模也进一步扩大了,是非常喜人的一个改变 ,然而随之而来的其他变化,就没那么…...

【嵌入式烧录刷写文件】-2.10-为一个Intel Hex文件计算校验和Checksum

案例背景(共6页精讲): 有如下一段Intel Hex文件,为其创建Checksum校验和:CRC16,CRC32(CVN),SHA-256 Hash算法…, 将Checksum Value填充到指定地址。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767…...

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…...

RabbitMQ 消息可靠保障

RabbitMQ 消息可靠保障 消息的可靠性保证生产者重连生产者确认解决思路A-确认机制解决思路B-备份交换机 MQ 服务器宕机导致消息丢失消费端消息的可靠性保障 消费端限流给消息生成唯一id 消息的可靠性保证 实际项目中 MQ 的流程一般是&#xff1a;生产端把消息路由到交换机&…...

Redis 作为 PHP 的会话存储

使用 Redis 作为 PHP 的会话存储&#xff0c;可以实现多个服务器之间的会话共享&#xff0c;提高会话管理的效率&#xff0c;特别是在分布式系统中。这种方法将会话数据存储在 Redis 中&#xff0c;而不是使用默认的文件系统&#xff0c;从而使多个服务器可以访问相同的会话数据…...

基于伏图的数字心脏模拟仿真APP应用介绍

一、背景介绍 心脏是保证人体正常运转最重要的动力&#xff0c;人体内的血液循环通过心血管运输到各个部位&#xff0c;因此&#xff0c;心血管系统的稳定是人体健康的关键。心血管内科领域极具专业性&#xff0c;其理论研究与技术发展日新月异&#xff0c;心血管疾病患者往往…...

智云-一个抓取web流量的轻量级蜜罐docker一键启动

智云-一个抓取web流量的轻量级蜜罐docker安装教程 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN docker快速启动(v1.4) git clone https://github.com/xiaoxiaoranxxx/POT-ZHIYUN.git cd POT-ZHIYUN docker-compose up -d默认映射到80和8080端口 mysql不对外开放…...

原生HTML5、CSS、JavaScript实现简易网易云音乐播放

1.效果图 2.源码 1.index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网易云音乐</title><link rel"stylesheet" href"../CSS/index.css"> </head>…...

网上商城小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品信息管理&#xff0c;商品类型管理&#xff0c;活动专区管理&#xff0c;新品上架管理&#xff0c;用户评价管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包…...

微分方程(Blanchard Differential Equations 4th)中文版Section2.2

动力系统的几何分析 捕食者-猎物系统的向量场 在第2.1节中&#xff0c;我们展示了两个不同捕食者-猎物系统的 R ( t ) R(t) R(t) 和 F ( t ) F(t) F(t) 图形&#xff0c;但没有描述我们是如何生成这些图形的。我们将在第2.5节中解决这个问题&#xff0c;采用欧拉方法推广到…...

Swift 环境搭建

Swift 环境搭建 Swift 是由苹果公司开发的一种强类型编程语言&#xff0c;用于iOS、macOS、watchOS和tvOS应用程序的开发。搭建Swift开发环境是开始使用Swift进行编程的第一步。本文将详细介绍如何在不同的操作系统上搭建Swift开发环境。 在macOS上搭建Swift环境 系统要求 …...

科技与出版

科技与出版 ISSN: 1005-0590 CN: 11-3209/G3 常设栏目&#xff1a;特别策划、产业观察、融媒之光、编辑实务、营销方略、学术探索、创作空间等。 稿件要求 (1)来稿应有创新性&#xff1b;立论科学&#xff0c;主题明确&#xff0c;推理严谨&#xff1b;词语准确&#xff0c;…...

5年前端面试之路

作者&#xff1a;星空海绵 顺便吆喝一声&#xff0c;技术大厂&#xff0c;内推捞人&#xff0c;前/后端or测试←感兴趣 --加班偶尔较多&#xff0c;但周末加班两倍工资。 --15-35K&#xff0c;工资一线城市属于一般&#xff0c;但二线城市很可以。 前言 由于公司要进行&#xf…...

产品运营(一)--产品运营是什么?

1.运营是什么&#xff1f; 通过一系列穿针引线式的行为和资源投入&#xff0c;让一件事能持续良性运转。 运营面向的主体不同&#xff0c;使用的运营手段也是不同的。作用&#xff1a;赋予产品闪耀的光芒。距离用户最近的人&#xff08;体验用户&#xff0c;成为用户?demo:k…...

学习大数据DAY41 Hive 分区表创建

目录 分区表 分区表应用场景 oracle 分区表种类 oracle 分区-范围分区 oracle 分区-列表分区 oracle 分区-散列分区 oracle 分区-组合分区 oracle 分区-分区表操作 hive 分区-创建分区表 hive 分区-分区表操作 hive 分区-动态分区表配置 上机练习 分区表 分区是将一…...

【三维目标检测模型】ImVoteNet

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“https://blog.csdn.net/suiyin…...

力扣 | 背包dp | 279. 完全平方数、518. 零钱兑换 II、474. 一和零、377. 组合总和 Ⅳ

文章目录 一、279. 完全平方数二、518. 零钱兑换 II三、474. 一和零四、377. 组合总和 Ⅳ 一、279. 完全平方数 LeetCode&#xff1a;279. 完全平方数 朴素想法&#xff1a; 这个题目最简单的想法是&#xff0c;可以用 O ( n n ) O(n\sqrt{}n) O(n ​n)的动态规划解决&#x…...

【ECMAScript性能优化的技巧与陷阱】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

Swift实时监听判断是否连接有网络WIFI和蜂窝数据

本章节讲解如何使用swift连接网络&#xff0c;实时的监听到网络的状态&#xff0c;在主界面中进行调用&#xff0c;网络包含Wi-Fi 和 蜂窝。 1.封装一个判断是否有网络的类 2.在封装类注册通知 3.主界面接收注册通知&#xff0c;并且调用封装的网络类 4.成功测试&#xff0c;有…...

(三)Flink Source 数据源

Flink 数据源主要分为内置数据源和第三方数据源。其中内置数据源包含文件、Socket 连接、集合类型数据等,不需要引入其它依赖库。第三方数据源定义了 Flink 和外部系统数据交互的逻辑,Flink 提供了非常丰富的数据源连接器,例如 Kafka、Elasticsearch、RabbitMQ、JDBC 等。 …...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...