一、TiDB Lightning介绍

TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,目前支持 Mydumper 或 CSV 输出格式的数据源。你可以在以下两种场景下使用 Lightning:
迅速导入大量新数据。
备份恢复所有数据。

目前,TiDB Lightning 支持以下后端:

  • Importer-backend(默认)
  • Local-backend
  • TiDB-backend

以上几种后端导入数据的区别如下:

  1. Importer-backend:tidb-lightning 先将 SQL 或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。

  2. Local-backend:tidb-lightning 先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对以 SST 文件的形式上传到各个 TiKV 节点,然后由 TiKV 将这些 SST 文件 Ingest 到集群中。和 Importer-backend 原理相同,不过不依赖额外的 tikv-importer 组件。

  3. 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


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

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览14923 人正在系统学习中
狂热JAVA小毕超


微信公众号

专注于JAVA、微服务、中间件等技术分享

[转帖]TIDB - 使用 Dumpling 和 TiDB Lightning 迁移Mysql数据至TIDB中的更多相关文章

  1. 多种方式告诉你如何计算DM同步数据到TiDB的延时时间

    背景 用户在做技术选型的过程中,总是会对一些数据指标比较关心,特别是在和竞品相比较的时候,更加需要一些有说服力的数据.基于MySQL开发的项目在迁移到TiDB的时候,使用DM同步数据是必不可少的一个环 ...

  2. MYSQL5.7实时同步数据到TiDB

    操作系统:CentOS7 mysql版本:5.7 TiDB版本:2.0.0 同步方法:使用TiDB提供的工具集进行同步 说明: 单机mysql同步时,可以直接使用binlog同步, 但mysql集群进 ...

  3. [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义

    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...

  4. MYSQL与TiDB的执行计划

    前言 这里采用了tpc-h一个数据库的数据量来进行查询计划的对比.并借助tpc-h中的22条查询语句进行执行计划分析. mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其 ...

  5. TiDB Lightning导入超大型txt文件实践

    背景 TiDB 提供了很多种数据迁移的方式,但这些工具/方案普遍对MySQL比较友好,一旦涉及到异构数据迁移,就不得不另寻出路,借助各种开源或商业的数据同步工具.其实数据在不同系统的流转当中,有一种格 ...

  6. 探索TiDB Lightning的源码来解决发现的bug

    背景 上一篇<记一次简单的Oracle离线数据迁移至TiDB过程>说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程. Oracle源库中表名都是大 ...

  7. 用一个性能提升了666倍的小案例说明在TiDB中正确使用索引的重要性

    背景 最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行. 这个规模不算大,测试数据以及库表结构是用Dump ...

  8. 【TIDB】4、业界使用情况

    一.小米 1.背景 小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘.由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快, 每天的读写量 ...

  9. 记一次简单的Oracle离线数据迁移至TiDB过程

    背景 最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式 ...

  10. TiDB:支持 MySQL 协议的分布式数据库解决方案

    [编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内 ITOM 管 ...

随机推荐

  1. Centos 利用本地镜像安装yum源

    前提 在"设置"中确保两点 1.勾选"已连接" 2.添加上本地的"centos.iso"镜像文件 切换到用户目录 cd / 新建一个iso目 ...

  2. 一文详解kube-apiserver认证鉴权能力

    本文分享自华为云社区<kube-apiserver认证鉴权能力>,作者: 可以交个朋友. HTTPS为什么要进行身份验证 首先不管是kubectl还是API调用都是通过HTTPS访问kub ...

  3. 十分钟从入门到精通(下)——OBS权限配置

    上一篇我们介绍了OBS权限管理中统一身份认证和企业项目管理,本期我们继续介绍OBS权限管理中的高级桶策略和ACL应用.   您是否也遇到过类似的问题或者困扰? 1.隔壁的主账户给了子用户创建一个桶,但 ...

  4. 分享两个常见的搜索算法:BFS和DFS

    摘要:本文为大家分享两个常见的搜索算法:BFS和DFS. 本文分享自华为云社区<BFS和DFS算法初探>,作者: ayin. 本次分享两个常见的搜索算法: 1.BFS 即广度优先搜索 2. ...

  5. 超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓

    摘要:memoryStore主要是将没有序列化的java对象数组或者序列化的byteBuffer放到内存中. 本文分享自华为云社区<spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌 ...

  6. 从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart

    Dart与Java的一些直观区别 Dart和java以及C#都差不多,基本上不用学习可以直接使用,从这里可以你可以了解Dart有些特别之处.其实对于Java开发人员来说Dart,还是相对好理解的 基本 ...

  7. 再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX

    总是会被javascript的event对象的clientX,offsetX,screenX,pageX 弄得头晕,于是决定做个图来区分一下(画得我手那个酸呀....) event对象位置信息获取 先 ...

  8. 再看centos:linux系统文件目录

    网站服务器目录,有说放/var  有说放/home ,我是放在自己创建的 /data/www下 ,对于linux文件目录,之前看过阮一峰老师的博客.现在再来回顾一下 linux 目录结构 https: ...

  9. Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践

    模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署.用户可以使用 HCL 语言自定义创建模板,也可以一键复 ...

  10. 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火 ...