[转帖]TIDB - 使用 Dumpling 和 TiDB Lightning 迁移Mysql数据至TIDB中
一、TiDB Lightning介绍
TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,目前支持 Mydumper 或 CSV 输出格式的数据源。你可以在以下两种场景下使用 Lightning:
迅速导入大量新数据。
备份恢复所有数据。
目前,TiDB Lightning 支持以下后端:
- Importer-backend(默认)
- Local-backend
- TiDB-backend
以上几种后端导入数据的区别如下:
Importer-backend:tidb-lightning 先将 SQL 或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。
Local-backend:tidb-lightning 先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对以 SST 文件的形式上传到各个 TiKV 节点,然后由 TiKV 将这些 SST 文件 Ingest 到集群中。和 Importer-backend 原理相同,不过不依赖额外的 tikv-importer 组件。
TiDB-backend:tidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。

注意点:
TiDB Lightning 与 TiFlash 一起使用时,无论是否已为一张表创建 TiFlash 副本,你均可以使用 TiDB Lightning 导入数据至该表。但该场景下 TiDB Lightning 导入数据耗费的时间更长,具体取决于 TiDB Lightning 部署机器的网卡带宽、TiFlash 节点的 CPU 及磁盘负载、TiFlash 副本数等因素。
二、导入的流程

三、准备工作
1. mysql 中的数据

在mysql中有testdb库和user表,等下就来迁移这张表的数据。
2. 下载Dumpling和TiDB Lightning工具
wget https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz
- 1
tar xvf tidb-toolkit-v5.0.1-linux-amd64.tar.gz
- 1
cd tidb-toolkit-v5.0.1-linux-amd64/bin/
- 1
四、使用Dumpling将mysql中的数据导出
进入到上面下载工具解压后的bin下,进行导出:
首先创建文件存储的目录:
mkdir -p /mysql/data && chmod -R 777 /mysql/data
- 1
使用mydumper导出数据
./mydumper -h 192.168.40.160 -P 3306 -u root -p root123 -t 16 -F 256 -B testdb -T user -r 200000 --skip-tz-utc -o /mysql/data/
- 1
-h:mysql所在主机ip
-P:mysql的端口
-u:mysql的用户
-p:mysql密码
-t: 导出数据使用线程数
-F:指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。
-B:导出的数据库
-T:指定导出的表,不写-T,则导出该库下所有表
-r:指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。
-o:导出数据存储的目录
执行上面命令后查看/mysql/data/目录:

从上面就可以看出,导出的为可读的SQL数据。
五、使用TiDB Lightning将数据导入TIDB中
进入到上面下载工具解压后的bin下,进行数据的导入:
编写tidb-lightning.toml文件:
vi tidb-lightning.toml
- 1
写入以下内容:
[lightning]
转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。
混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。
region-concurrency =
日志
level = "info"
file = "tidb-lightning.log"
[tikv-importer]
backend 设置为 local 模式
backend = "local"
设置本地临时存储路径
sorted-kv-dir = "/tem"
[mydumper]
源数据目录。
data-source-dir = "/mysql/data"
[tidb]
目标集群的信息。tidb-server 的监听地址,填一个即可。
host = "192.168.40.160"
port = 4000
user = "root"
password = ""
表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
pd-server 的地址,填一个即可
pd-addr = "192.168.40.161:2379"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
backend = "local”:表示直接导入到 TiKV-Server 中
pd-addr = "192.168.40.161:2379”:选择任意一个 PD 节点的 IP 和输入端口号
开始导入
! /bin/bash
nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
- 1
- 2
执行完成后,查看tidb-lightning.log日志文件:

已经导入成功,下面看下TIDB中的数据:

数据已经导入TIDB中。
六、注意点
TiDB Lightning在数据导入的时候,会将TIDB集群置为导入模式,可以增加导入的速度,但会影响TIDB的读写。导入成功后TiDB Lightning会自动将集群恢复成普通状态,如果导入失败,则不会将集群恢复成普通状态,依然还处于导入状态,集群会产生大量未压缩的文件,继而消耗 CPU 并导致延迟。此时集群是有问题的,因此需要手动置为普通状态。
查看当前的模式:
tidb-lightning-ctl --fetch-mode
- 1

如果不是Normal 则需要手动置为普通状态
./tidb-lightning-ctl -switch-mode=normal
- 1

喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

微信公众号
专注于JAVA、微服务、中间件等技术分享
[转帖]TIDB - 使用 Dumpling 和 TiDB Lightning 迁移Mysql数据至TIDB中的更多相关文章
- 多种方式告诉你如何计算DM同步数据到TiDB的延时时间
背景 用户在做技术选型的过程中,总是会对一些数据指标比较关心,特别是在和竞品相比较的时候,更加需要一些有说服力的数据.基于MySQL开发的项目在迁移到TiDB的时候,使用DM同步数据是必不可少的一个环 ...
- MYSQL5.7实时同步数据到TiDB
操作系统:CentOS7 mysql版本:5.7 TiDB版本:2.0.0 同步方法:使用TiDB提供的工具集进行同步 说明: 单机mysql同步时,可以直接使用binlog同步, 但mysql集群进 ...
- [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...
- MYSQL与TiDB的执行计划
前言 这里采用了tpc-h一个数据库的数据量来进行查询计划的对比.并借助tpc-h中的22条查询语句进行执行计划分析. mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其 ...
- TiDB Lightning导入超大型txt文件实践
背景 TiDB 提供了很多种数据迁移的方式,但这些工具/方案普遍对MySQL比较友好,一旦涉及到异构数据迁移,就不得不另寻出路,借助各种开源或商业的数据同步工具.其实数据在不同系统的流转当中,有一种格 ...
- 探索TiDB Lightning的源码来解决发现的bug
背景 上一篇<记一次简单的Oracle离线数据迁移至TiDB过程>说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程. Oracle源库中表名都是大 ...
- 用一个性能提升了666倍的小案例说明在TiDB中正确使用索引的重要性
背景 最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行. 这个规模不算大,测试数据以及库表结构是用Dump ...
- 【TIDB】4、业界使用情况
一.小米 1.背景 小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘.由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快, 每天的读写量 ...
- 记一次简单的Oracle离线数据迁移至TiDB过程
背景 最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式 ...
- TiDB:支持 MySQL 协议的分布式数据库解决方案
[编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内 ITOM 管 ...
随机推荐
- Centos 利用本地镜像安装yum源
前提 在"设置"中确保两点 1.勾选"已连接" 2.添加上本地的"centos.iso"镜像文件 切换到用户目录 cd / 新建一个iso目 ...
- 一文详解kube-apiserver认证鉴权能力
本文分享自华为云社区<kube-apiserver认证鉴权能力>,作者: 可以交个朋友. HTTPS为什么要进行身份验证 首先不管是kubectl还是API调用都是通过HTTPS访问kub ...
- 十分钟从入门到精通(下)——OBS权限配置
上一篇我们介绍了OBS权限管理中统一身份认证和企业项目管理,本期我们继续介绍OBS权限管理中的高级桶策略和ACL应用. 您是否也遇到过类似的问题或者困扰? 1.隔壁的主账户给了子用户创建一个桶,但 ...
- 分享两个常见的搜索算法:BFS和DFS
摘要:本文为大家分享两个常见的搜索算法:BFS和DFS. 本文分享自华为云社区<BFS和DFS算法初探>,作者: ayin. 本次分享两个常见的搜索算法: 1.BFS 即广度优先搜索 2. ...
- 超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓
摘要:memoryStore主要是将没有序列化的java对象数组或者序列化的byteBuffer放到内存中. 本文分享自华为云社区<spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌 ...
- 从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart
Dart与Java的一些直观区别 Dart和java以及C#都差不多,基本上不用学习可以直接使用,从这里可以你可以了解Dart有些特别之处.其实对于Java开发人员来说Dart,还是相对好理解的 基本 ...
- 再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX
总是会被javascript的event对象的clientX,offsetX,screenX,pageX 弄得头晕,于是决定做个图来区分一下(画得我手那个酸呀....) event对象位置信息获取 先 ...
- 再看centos:linux系统文件目录
网站服务器目录,有说放/var 有说放/home ,我是放在自己创建的 /data/www下 ,对于linux文件目录,之前看过阮一峰老师的博客.现在再来回顾一下 linux 目录结构 https: ...
- Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践
模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署.用户可以使用 HCL 语言自定义创建模板,也可以一键复 ...
- 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火 ...