一、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. Angular 集成 Material UI 后组件显示不正常 踩坑日记

    在使用了 npm 下载 Material 后, 项目不能正常使用 Material 组件, 随后又使用官方命令使用 Material 组件, 仍然不能正常使用 Material 组件. npm 命令 ...

  2. [极客大挑战 2019]EasySQL 1

    [极客大挑战 2019]EasySQL 1 观察题目,发现为登录界面,判断这道题的考点是SQL注入. 知识点 万能密码 知识点原理 当用户尝试登录时 网站后台会进行SQL查询,比如 [select * ...

  3. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)

    前言 书接上回,上回我们了解了 castle 代理的一些缺点,本文将开始操作整合 Microsoft.Extension.Dependency和Castle,以让默认的容器可以支持拦截器 我们将以进阶 ...

  4. tmux 增加历史回滚缓冲区 buffer

    tmux 默认回滚 2000 行,如果要查看更多记录(比如编译报错)可以在.tmux.conf文件中增加一行 set -g history-limit 5000 重启 tmux session 生效

  5. 云原生势不可挡,华为云GaussDB加速企业数字化转型

    4月8日,华为云TechWave全球技术峰会在深圳成功举办,其中,在围绕"数据使能,驱动业务增长"为主题的数据使能分论坛会上,华为云GaussDB技术专家胡彦军现场分享了云原生数据 ...

  6. 五一高铁票难抢?用RPA机器人试试!

    随着信息数字化的高速发展,RPA在各行业中得到广泛应用,热度大增.这匹"技术黑马"已然成为构建业务流程自动化的重要引擎之一,助力企业组织向"智能自动化转型. 什么是RPA ...

  7. 克服 ClickHouse 运维难题:ByteHouse 水平扩容功能上线

    前言 对于分析型数据库产品,通过增加服务节点实现集群水平扩容,并提升集群性能和容量,是运维的必要手段. 但是对于熟悉 ClickHouse 的工程师而言,听到"扩容"二字一定会头疼 ...

  8. Solon 开发进阶,四、启动参数说明

    Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 启动参数,在应用启动后会被静态化(为了内部更高效的利用).比如,想通过体外扩展加载配置, ...

  9. Hugging Face CEO: 2024 将是AI丰收年

    来自CEO的新年祝福 ️附加了他对于2024年人工智能界的四大预测你觉得2024年人工智能和机器学习界会是什么样的呢?欢迎留言

  10. Go--字符串函数

    示例: package main import ( "fmt" "strings" ) func main() { //strings.Contains(): ...