百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MySQL数据迁移到TiDB的流程及为何放弃MyCat

bigegpt 2024-10-24 09:00 8 浏览

背景

TiDB 是一个分布式关系型数据库,可以无缝对接 MySQL。考虑到产品数据量大的情况下,单机 MySQL 可能无法支撑,而无缝切换到 TiDB 集群也比较方便,所以领导让我调研了一天迁移过程。

本文将记录使用 mydumper 工具导出 MySQL 数据库数据,并使用 TiDB Lightning 将数据迁移到 TiDB 集群的流程。对比以前部署测试 MyCat 时的经历,发现 TiDB 迁移时不需要配置分库分表规则,迁移过程更方便,对得起“无缝”二字!

第一步,部署 TiDB Lightning

TiDB Lightning 部署包是一个压缩文件,解压后可直接使用,部署流程非常简单:

(一)确定 TiDB 版本

用 MySQL 客户端连接到 TiDB 集群后,执行 select version() 语句得到版本号:

(二)下载工具包

根据版本号,确定下载连接:https://download.pingcap.org/tidb-toolkit-{version}-linux-amd64.tar.gz 替换为具体的版本号后的地址。

下载文件:

wget  https://download.pingcap.org/tidb-toolkit-v4.0.0-linux-amd64.tar.gz

(三)解压

进入部署包所在目录,解压:

tar -xzf tidb-toolkit-v4.0.0-linux-amd64.tar.gz

进入解压后的 bin 目录,查看它提供的工具:


mydumpertidb-lightning 就是一对导出、导入工具,其中 mydumper 跟 MySQL 的 mysqldump 功能是一样的。

但是据我测试导出 3.9G 的数据耗时来看,mydumpermysqldump 快很多。

建议使用 mydumper,原因是用它导出的数据时,会自动创建 xxx-schema-create.sql 建库文件,而且建表和插入 SQL 文件分开,不用额外操作,配套用 tidb-lightning 执行导入,不容易出错。

如果用 mysqldumper 则需要注意导出建库语句,是否需要添加 use database 之类的语句,用 MySQL 的 source 导入时容易出现的问题,都需要注意。不是配套的工具,这种方式没有测试过。

第二步,导出 MySQL 数据

进入 bin 目录,用 mydumper 工具,连接到目标数据库上导出,命令如下:

./mydumper -h  IP -P 3306 -u root -p 123456 -t 16 -F 128 -B targetDatabase -o /tidb-data/mydumpersql/

参数说明:

  1. -B, --database 需要备份的数据库
  2. -t,–threads 备份执行的线程数,默认4个线程
  3. -F,–chunk-filesize 行块分割表的文件大小,单位是MB
  4. -o,–outputdir 备份文件目录

注意,最后一个 outputdir 的值,后面导入的时候需要使用。因为使用多线程,所以就不难理解为何它的效率会比 mysqldumper 高了。

第三步,导入 TiDB 集群

最后一步,利用 tidb-lightning 工具将第二步导出的数据,导入到 TiDB 集群中。

官网的操作流程不是很清楚,而且给出的 tidb-lightning 里面有一项配置对 4.0.0 版本来说会报错,这里提供纠正后的完整配置。

(一)创建配置文件

在 bin 目录下创建一个配置文件 tidb-lightning.toml【文件名称任意】,并打开:

touch tidb-lightning.toml
vi tidb-lightning.toml

写入如下配置信息:

[lightning]

# 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。
# 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。
# region-concurrency =

# 日志
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
# backend 设置为 local 模式
backend = "tidb"
# 设置本地临时存储路径
# sorted-kv-dir = "/mnt/ssd/sorted-kv-dir"

[mydumper]
# Mydumper 源数据目录。
data-source-dir = "/tidb-data/mydumpersql"

[tidb]
# 目标集群的信息。tidb-server 的监听地址,填一个即可。
host = "192.168.xxx.xxx"
port = 4000
user = "root"
password = "root"
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# pd-server 的地址,填一个即可
# pd-addr = "192.168.xxx.xxx:2379"

说明:

  1. data-source-dir 就是第二步导出时 -o 的参数值;
  2. host 是 TiDB 集群地址和端口;
  3. sorted-kv-dir 这个配置不支持,放开后会报错:unknown configuration options: tikv-importer.sorted-kv-dir
  4. pd-addr 这个配置没啥用,去掉也不影响导入

(二)执行导入命令

由于数据库全量导入,操作耗时较长,官方建议将导入命令封装成脚本。

先在 bin 目录下创建一个 loaddata.sh 文件,内容如下:

#!/bin/bash
nohup ./tidb-lightning -config ./tidb-lightning.toml > nohup.out &

执行脚本,然后查看 TiDB 的集群日志 tidb.log ,查看导入进度。

导入完成后,用 MySQL 客户端连接到 TiDB 集群的一个主机,查看数据。

启示录

将 MySQL 数据迁移到 TiDB 的过程,直接参考官方文档进行操作就可以了。但是,涉及到 tidb-lightning 工具的那一章节,内容跟数据迁移章节有一些看不懂,其中涉及到 tikv-importer,它和 tidb-lightning 的关系没有详细说明,还有一些配置项会导致导入报错。

实践证明,只用 tidb-lightning 工具就可以完成数据迁入过程。

去年 8 月份调研过 MyCat 集群,由于它的分片分库规则比较复杂,而目前这个产品涉及的表比较多,而且很多都是动态创建的,所以只做了技术调研,一直没有技术落地。

MyCat 和 TiDB 都不会对应用端代码产生影响,JDBC 连接只需要修改 IP 和端口就好,几乎没有工作量。库表迁移就不一样了,TiDB 可以直接迁移。

MyCat 由于 Schema 和表创建涉及到分库分表策略,需要自己设计数据分布规则,当初也只是简单写了一个生成配置的小程序,不敢保证能够数据能够无缝正确迁移。

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...