021、数据库管理之数据导入工具(Lightning)

这篇具有很好参考价值的文章主要介绍了021、数据库管理之数据导入工具(Lightning)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TiDB Lightning 是TiDB数据库的生态工具之一,可以将全量数据高速导入到TiDB集群中。

  • 支持的数据格式
    Dumping、CSV等输出格式IDE数据源

Lightning原理

导入模式-》建立schema和表->分割表->读取SQL DUMP-》 写入本地临时存储->导入数据到TiKV集群-》校验与分析

DDL 的SQL语句通过TiDB Server执行,生成对象。但是里面的数据并不是将SQL应用到TiDB上,而是将读取的数据直接应用对应的TiKV上,所以快。数据的应用,它不是通过SQL(类似insert)执行方式实现,而是将读到的数据,直接载入到TiKV中。它可以通过pd获得元数据信息,来辅助这个导入。
注意: 如果中间断掉了,需要手工切换到普通模式

021、数据库管理之数据导入工具(Lightning)

后端模式对比

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

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

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

  • TiDB-backend:tidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。它就是传统执行SQL(insert ),支持事务。
    其他两种方式,不能导入的同时还做dml。

后端 Local-backend Importer-backend TiDB-backend
速度 快 (~500 GB/小时) 快 (~400 GB/小时) 慢 (~50 GB/小时)
资源使用率
占用网络带宽
导入时是否满足 ACID
目标表 必须为空 必须为空 可以不为空
额外组件 tikv-importer
支持 TiDB 集群版本 >= v4.0.0 全部 全部
是否影响 TiDB 对外提供服务

部署需求

  • 硬件需求
  • 32+ 逻辑核CPU
  • SSD 硬盘
  • 使用万兆网卡
  • 单独部署
  • 比较吃硬件资源,例如源数据是1t,假设3副本 13,另外还有个本地临时缓存,所以再乘以2 13*2=6t
  • 权限:select insert update delete create drop alter

获取TiDB Lightning

  • 使用TiUP执行 tiup install lightning命令
  • tidb-toolkit 安装包

配置Lightning

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

[tikv-importer]
# 选择使用的导入模式,如下为local模式
backend = "local"
# 设置本地临时存储路劲,排序的键值对的临时存放地址,目标路径需要是一个空目录
sorted-kv-dir = "/mnt/ssd/sorted-kv-dir"

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

# 配置通配符规则,默认规则会过滤 mysql、sys、INFORMATION_SCHEMAPERFORMANCE_SCHEMAMETRICS_SCHEMAINSPECTION_SCHEMA 系统数据库下的所有表
# 若不配置该项,导入系统表时会出现“找不到 schema”的异常
filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']

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

把SQL语句提炼成键值对形式,临时存放在本地临时存储路径中,然后直接加载这些数据。

启动运行Lightning

#!/bin/bash
nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out &## 退出Lightning

退出Lightning

导入完毕后,Lightning 会自动退出。若导入成功,日志的最后一行会显示 tidb lightning exit。

断点续传



# 存储断点的方式
#  - file:存放在本地文件系统(要求 v2.1.1 或以上)
#  - mysql:存放在兼容 MySQL 的数据库服务器
driver = "file"

# 存储断点的架构名称(数据库名称)
# 仅在 driver = "mysql" 时生效
# schema = "tidb_lightning_checkpoint"


1、断电续传的启用与配置

[checkpoint]
# 启用断点续传。
# 导入时,TiDB Lightning 会记录当前进度。
# 若 TiDB Lightning 或其他组件异常退出,在重启时可以避免重复再导入已完成的数据。
enable = true

2、断点的存储

# 断点的存放位置
#file : 本地文件系统  ; mysql: 数据库服务器
# 若 driver = "file",此参数为断点信息存放的文件路径。
# 如果不设置该参数则默认为 `/tmp/CHECKPOINT_SCHEMA.pb`
#
# 若 driver = "mysql",此参数为数据库连接参数 (DSN),格式为“用户:密码@tcp(地址:端口)/”。
# 默认会重用 [tidb] 设置目标数据库来存储断点。
# 为避免加重目标集群的压力,建议另外使用一个兼容 MySQL 的数据库服务器。
# dsn = "/tmp/tidb_lightning_checkpoint.pb"

# 导入成功后是否保留断点。默认为删除。
# 保留断点可用于调试,但有可能泄漏数据源的元数据。
# keep-after-success = false

3、 断点续传的控制i
若 tidb-lightning 因不可恢复的错误而退出(例如数据出错),重启时不会使用断点,而是直接报错离开。为保证已导入的数据安全,这些错误必须先解决掉才能继续。使用 tidb-lightning-ctl 工具可以标示已经恢复。

--checkpoint-error-destroy
tidb-lightning-ctl --checkpoint-error-destroy='`schema`.`table`'
该命令会让失败的表从头开始整个导入过程。选项中的架构和表名必须以反引号 (`) 包裹,而且区分大小写。

如果导入 `schema`.`table` 这个表曾经出错,这条命令会:

从目标数据库移除 (DROP) 这个表,清除已导入的数据。
将断点重设到“未开始”的状态。
如果 `schema`.`table` 没有出错,则无操作。

传入 "all" 会对所有表进行上述操作。这是最方便、安全但保守的断点错误解决方法:

tidb-lightning-ctl --checkpoint-error-destroy=all
--checkpoint-error-ignore
tidb-lightning-ctl --checkpoint-error-ignore='`schema`.`table`' &&
tidb-lightning-ctl --checkpoint-error-ignore=all
如果导入 `schema`.`table` 这个表曾经出错,这条命令会清除出错状态,如同没事发生过一样。传入 "all" 会对所有表进行上述操作。

注意
除非确定错误可以忽略,否则不要使用这个选项。如果错误是真实的话,可能会导致数据不完全。启用校验和 (CHECKSUM) 可以防止数据出错被忽略。
--checkpoint-remove
tidb-lightning-ctl --checkpoint-remove='`schema`.`table`' &&
tidb-lightning-ctl --checkpoint-remove=all
无论是否有出错,把表的断点清除。
--checkpoint-dump
tidb-lightning-ctl --checkpoint-dump=output/directory
将所有断点备份到传入的文件夹,主要用于技术支持。此选项仅于 driver = "mysql" 时有效。

使用表库过滤

  • 命令行
    在命令行中使用多个 -f 或 --filter 参数,即可在 TiDB 数据迁移工具中应用表库过滤规则。每个过滤规则均采用 db.table 形式,支持通配符(详情见下一节)。以下为各个工具中的使用示例:
BR./br backup full -f 'foo*.*' -f 'bar*.*' -s 'local:///tmp/backup'
./br restore full -f 'foo*.*' -f 'bar*.*' -s 'local:///tmp/backup'
Dumpling:

./dumpling -f 'foo*.*' -f 'bar*.*' -P 3306 -o /tmp/data/
TiDB Lightning:

./tidb-lightning -f 'foo*.*' -f 'bar*.*' -d /tmp/data/ --backend tidb
  • TOML 配置文件
    在 TOML 文件中,表库过滤规则以字符串数组的形式指定。以下为各个工具中的使用示例:
TiDB Lightning:

[mydumper]
filter = ['foo*.*', 'bar*.*']
TiCDC:

[filter]
rules = ['foo*.*', 'bar*.*']

[[sink.dispatchers]]
matcher = ['db1.*', 'db2.*', 'db3.*']
dispatcher = 'ts'

表库过滤语法

  • 直接使用表名
每条表库过滤规则由“库”和“表”组成,两部分之间以英文句号 (.) 分隔。只有表名与规则完全相符的表才会被接受。
db1.tbl1
db2.tbl2
db3.tbl3
表名只由有效的标识符组成,例如:
数字(09)
字母(a 到 z,AZ)
$
_
非 ASCII 字符(U+0080U+10FFFF)

使用通配符

表名的两个部分均支持使用通配符(详情见 fnmatch(3) )。

*:匹配零个或多个字符。
?:匹配一个字符。
[a-z]:匹配 "a""z" 之间的一个字符。
[!a-z]:匹配不在 "a""z" 之间的一个字符。
db[0-9].tbl[0-9a-f][0-9a-f]
data.*
*.backup_*
此处,“字符”指的是一个 Unicode 码位,例如:

U+00E9 "é"1 个字符。
U+0065U+0301 "é"2 个字符。
U+1F926 U+1F3FF U+200D U+2640 U+FE0F "🤦🏿‍♀️"5 个字符。

使用文件导入

如需导入一个文件作为过滤规则,请在规则的开头加上一个 “@” 来指定文件名。库表过滤解析器将导入文件中的每一行都解析为一条额外的过滤规则。

例如,config/filter.txt 文件有以下内容:

employees.*
*.WorkOrder

以下两条表库过滤命令是等价的:

./dumpling -f '@config/filter.txt'
./dumpling -f 'employees.*' -f '*.WorkOrder'

导入的文件里不能使用过滤规则导入另一个文件。

注释与空行

导入的过滤规则文件中,每一行开头和结尾的空格都会被去除。此外,空行(空字符串)也将被忽略。

行首的 # 表示该行是注释,会被忽略。而不在行首的 # 则会被认为是语法错误。

# 这是一行注释
db.table   # 这一部分不是注释,且可能引起错误

排除规则

在一条过滤规则的开头加上 !,则表示符合这条规则的表不会被 TiDB 数据迁移工具处理。通过应用排除规则,库表过滤可以作为屏蔽名单来使用。

*.*
#^ 注意:必须先添加 *.* 规则来包括所有表
!*.Password
!employees.salaries

转义字符

如果需要将特殊字符转化为标识符,可以在特殊字符前加上反斜杠 \。

db\.with\.dots.*

为了简化语法并向上兼容,不支持下列字符序列:

  • 在行尾去除空格后使用 \(使用 [ ] 来匹配行尾的空格)。
  • 在 \ 后使用数字或字母 ([0-9a-zA-Z])。特别是类似 C 的转义序列,如 \0、\r、\n、\t 等序列,目前在表库过滤规则中无意义。

引号包裹的标识符

除了 \ 之外,还可以用 " 和 ` 来控制特殊字符。

"db.with.dots"."tbl\1"
`db.with.dots`.`tbl\2`

也可以通过输入两次引号,将引号包含在标识符内。

"foo""bar".`foo``bar`


# 等价于:
foo\"bar.foo\`bar

用引号包裹的标识符不可以跨越多行。

用引号只包裹标识符的一部分是无效的,例如:

"this is "invalid*.*

正则表达式

如果你需要使用较复杂的过滤规则,可以将每个匹配模型写为正则表达式,以 / 为分隔符:

/^db\d{2,}$/./^tbl\d{2,}$/
这类正则表示使用 Go dialect。只要标识符中有一个子字符串与正则表达式匹配,则视为匹配该模型。例如,/b/ 匹配 db01。

注意

正则表达式中的每一个 / 都需要转义为 \/,包括在 [...] 里面的 /。不允许在 \Q...\E 之间放置一个未转义的 /

使用多个过滤规则

当表的名称与过滤列表中所有规则均不匹配时,默认情况下这些表被忽略。

要建立一个屏蔽名单,必须使用显式的 . 作为第一条过滤规则,否则所有表均被排除。

# 所有表均被过滤掉
./dumpling -f '!*.Password'

# 只有 “Password” 表被过滤掉,其余表仍保留
./dumpling -f '*.*' -f '!*.Password'

如果一个表的名称与过滤列表中的多个规则匹配,则以最后匹配的规则为准。例如:

# rule 1
employees.*
# rule 2
!*.dep*
# rule 3
*.departments

过滤结果如下:

表名 规则 1 规则 2 规则 3 结果
irrelevant.table 默认(拒绝)
employees.employees 规则 1
employees.dept_emp 规则 2(拒绝)
employees.departments 规则 3(接受)
else.departments 规则 3(接受)

实验

1、检查备份数据
上一小节中,使用导出工具dumpling将test库的数据导出。这个时候使用TiDB Lighting工具将其导入到TiDB数据库中

[root@tiup tmp]# cd test/
[root@tiup test]# ls
metadata                         test.afs_test-schema.sql   test.t1-schema.sql
test-schema-create.sql     test.t2.0000000010000.sql
test.afs_test.0000000010000.sql  test.t1.0000000010000.sql  test.t2-schema.sql

2、模拟故障

mysql> drop database test;
Query OK, 0 rows affected (0.58 sec)

2、编辑TiDB Lighting 工具的配置文件

[root@tiup ~]# more tidb-lightning.yaml 
 [lightning]
 # 日志
 level = "info"
 file = "tidb-lightning.log"
 [tikv-importer]
 # 选择使用的 local 后端
 backend = "local"
 # 设置排序的键值对的临时存放地址,目标路径需要是一个空目录
 sorted-kv-dir = "/tmp/tidb-test/kv"
 [mydumper]
 # 源数据目录。
 data-source-dir = "/tmp/test"

 [tidb]
 # 目标集群的信息
 host = "192.168.16.10"
 port = 4000
 user = "root"
 password = ""
 # 表架构信息在从 TiDB 的“状态端口”获取。
 status-port = 10080
 # 集群 pd 的地址
 pd-addr = "192.168.16.10:2379"

3、导入备份文件

[root@tiup tidb-toolkit]# ./tidb-lightning -config ~/tidb-lightning.yaml 
Verbose debug logs will be written to tidb-lightning.log

+---+----------------------------------------------+-------------+--------+
| # | CHECK ITEM                                   | TYPE        | PASSED |
+---+----------------------------------------------+-------------+--------+
| 1 | Source csv files size is proper              | performance | true   |
+---+----------------------------------------------+-------------+--------+
| 2 | checkpoints are valid                        | critical    | true   |
+---+----------------------------------------------+-------------+--------+
| 3 | table schemas are valid                      | critical    | true   |
+---+----------------------------------------------+-------------+--------+
| 4 | Cluster is available                         | critical    | true   |
+---+----------------------------------------------+-------------+--------+
| 5 | Lightning has the correct storage permission | critical    | true   |
+---+----------------------------------------------+-------------+--------+
.....

4、 验证

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA     |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

5、查看Lighting日志文章来源地址https://www.toymoban.com/news/detail-507358.html

[root@tiup tidb-toolkit]# more tidb-lightning.log 

到了这里,关于021、数据库管理之数据导入工具(Lightning)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SmartSQL 一款开源的数据库文档管理工具

    建议直接蓝奏云下载安装 蓝奏云下载:https://wwoc.lanzoum.com/b04dpvcxe 蓝奏云密码:123 项目介绍 SmartSQL 是一款方便、快捷的数据库文档查询、导出工具!从最初仅支持 数据库、 CHM 文档格式开始,通过不断地探索开发、集思广益和不断改进,又陆续支持 Word 、 Excel 、 PDF 、 Htm

    2024年02月07日
    浏览(70)
  • DBeaver:开源、跨平台、强大的数据库管理工具

    1.DBeaver 是什么 DBeaver 是一个流行的开源数据库客户端,它可以用于连接和管理多种不同类型的数据库系统,包括 MySQL、PostgreSQL、Oracle、Microsoft SQL Server 等等。 DBeaver 提供了一种直观的用户界面,允许用户执行各种数据库操作,如查询、修改、备份等等,同时也提供了一些高

    2024年01月25日
    浏览(77)
  • 探索SQLiteBrowser:一款强大的开源数据库管理工具

    项目地址:https://gitcode.com/sqlitebrowser/sqlitebrowser SQLiteBrowser 是一个直观且功能丰富的开源应用程序,专为管理和编辑SQLite数据库而设计。这款项目提供了一个简洁的界面,让开发者和非开发人员都能轻松地创建、查看和修改SQLite数据库的内容。在本文中,我们将深入探讨其技术

    2024年04月22日
    浏览(71)
  • DBeaver数据库管理工具安装连接PostgreSQL和DM

    1. 安装 下载地址 https://dbeaver.io/download/ 2. 连接PostgreSQL 配置显示所有数据库 第二个勾选会显示模板数据库 点击 测试连接 ,然后下载驱动 连接成功 3. 连接DM8 3.1 下载驱动 地址 https://eco.dameng.com/document/dm/zh-cn/app-dev/java_Mybatis_frame.html 下载完成解压,将需要的 DmJdbcDriver18.jar 放到

    2024年02月16日
    浏览(48)
  • 重磅一款极具潜力的开源免费数据库管理工具!

    最近看到一个冷门的数据库管理工具: slashbase 。 这个工具是开源免费的,由于开源不久,目前才900+的Star,但用下来还是非常不错的,DD觉得这款工具还是非常有潜力的,所以给大家推荐一下。 slashbase 有几个比较亮眼的功能,比如: 它提供了两种不同的管理方式,用户可以

    2024年02月14日
    浏览(78)
  • 【Database-02】达梦数据库 - DM Manager管理工具安装

    DM Manager是达梦数据库自带的图形化界面管理工具,在安装达梦数据库的时候就会自动安装。 Linux环境,默认安装路径为:达梦安装目录/tool/manager,如果Linux是安装GUI,那么就可以直接启动使用。 实际大部分使用过程中,是在windows环境另外再安装一个达梦数据库客户端。 从达

    2024年02月15日
    浏览(60)
  • Navicat 16 for MySQL:打造高效数据库开发管理工具

    随着数据的快速增长和复杂性的提升,数据库成为了现代应用开发中不可或缺的一部分。而在MySQL数据库领域,Navicat 16 for MySQL作为一款强大的数据库开发管理工具,正受到越来越多开发者的青睐。 Navicat 16 for MySQL拥有丰富的功能和直观的界面,能够帮助开发者轻松进行数据库

    2024年01月24日
    浏览(76)
  • Redis Desktop Manager 中文--强大的Redis数据库管理工具

    Redis Desktop Manager(简称RDM)是一款开源且功能强大的图形化Redis管理工具。它支持Windows、macOS和Linux等多平台,为Redis数据库提供了直观友好的管理界面。通过RDM,用户可以轻松连接多个Redis服务器,管理连接信息,并直观地浏览和查看数据库中的数据结构。同时,它还支持键

    2024年04月16日
    浏览(55)
  • 给你安利一款带有AI功能的数据库管理工具

    写在前面 说到数据库管理工具,大家应该不陌生了 小伙伴们应该都用过** Navicat 、 DBever 、 DataGrip 、 SQLyog 、 plsqldeveloper 等**数据库管理工具 这些工具呢都各自有优缺点。 今天要给大家推荐的是一款带有AI 功能的数据库管理工具** Chat2DB ** 一 、📖Chat2DB简介 Chat2DB 是一款开源

    2024年04月23日
    浏览(60)
  • 如何根据需求选择合适的数据库管理工具?Navicat OR DBeaver

    1.写在前面 在阅读本文之前,糖糖给大家准备了Navicat和DBeaver安装包,在公众号内回复“Navicat”或“DBeaver”或\\\"数据库管理工具\\\"来下载。 2. 引言 对于测试而言,在实际工作中往往会用到数据库,那么选择使用哪种类型的数据库管理工具显的尤为重要,我们常用的数据库管理

    2023年04月17日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包