[转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库

tidb,使用,dumpling,导出,数据,lightning,导入到,一个 · 浏览次数 : 0

小编点评

**数据导出工具:** * TiDB-A 库 * TiDB-B 库 **导出命令:** ``` nohup /home/service/var/data/tidb-util/dumpling -u 用户名 -P 端口 -p 密码 -h IP地址 --filetype sql --threads 32 --rows 1000 --params "tidb_distsql_scan_concurrency=5,tidb_mem_quota_query=8589934592" -o /home/service/var/data/tidb-util/pull_db --filter "库名.*" -F 1GiB > /home/service/var/data/tidb-util/logs/pull_log.log 2>&1 & ``` **参数解释:** * `-u 用户名`:您要使用的 TiDB 管理器的用户名。 * `-P 端口`:您要使用的 TiDB 管理器的端口。 * `-p 密码`:您要使用的 TiDB 管理器的密码。 * `-h IP地址`:您要使用的 TiDB 管理器的 IP 地址。 * `--filetype sql`:指定导出数据为 SQL 文件。 * `--threads 32`:设置并发数量为 32。 * `--rows 1000`:指定导出 1000 行数据。 * `--params "tidb_distsql_scan_concurrency=5,tidb_mem_quota_query=8589934592"`:设置导出参数。 * `-o /home/service/var/data/tidb-util/pull_db`:将导出数据写入文件 `/home/service/var/data/tidb-util/pull_db`。 * `--filter "库名.*"`:筛选导出数据中的库名。 * `-F 1GiB`:设置文件大小为 1 GiB。 * `> /home/service/var/data/tidb-util/logs/pull_log.log 2>&1 &`:将输出和错误日志写入文件中。 **注意事项:** * 请确保您使用的 TiDB 管理器的权限高,可以访问并执行 `dumpling` 命令。 * 该命令需要在 TiDB 管理后台的 `Cluster Info` 中设置有效的 IP 地址、用户名和密码。 * 请确保您拥有足够的磁盘空间来存储导出数据。

正文

本文介绍从 TiDB-A 库导出数据到 TiDB-B 库;

导出

Dumpling 包含在 tidb-toolkit 安装包中,可在此下载

从 TiDB/MySQL 导出数据

需要的权限

  • SELECT
  • RELOAD
  • LOCK TABLES
  • REPLICATION CLIENT

导出到 sql 文件

先贴命令

  1. nohup /home/service/var/data/tidb-util/dumpling \
  2. -h IP地址 \
  3. -P 端口 \
  4. -u 用户名 \
  5. -p 密码 \
  6. --filetype sql \
  7. --threads 32 \
  8. --rows 1000 \
  9. --params "tidb_distsql_scan_concurrency=5,tidb_mem_quota_query=8589934592" \
  10. -o /home/service/var/data/tidb-util/pull_db \
  11. --filter "库名.*" \
  12. -F 1GiB > /home/service/var/data/tidb-util/logs/pull_log.log 2>&1 &

等同于

nohup /home/service/var/data/tidb-util/dumpling -u 用户名 -P 端口 -p 密码 -h IP地址 --filetype sql --threads 32 --rows 1000 --params "tidb_distsql_scan_concurrency=5,tidb_mem_quota_query=8589934592" -o /home/service/var/data/tidb-util/pull_db --filter "库名.*" -F 1GiB > /home/service/var/data/tidb-util/logs/pull_log.log 2>&1 &

这个命令中有一些参数,释义如下:

参数 Key释义说明
-u用户名 
-p密码 
-h 或 --hostIP地址这里注意,需要使用TiDB管理后台的 Cluster Info 中的IP地址
-P端口一般情况都是4000
--filetype导出类型

目前本文演示的是导出 sql

-t 或 --threadsdumpling 并发线程数 
-r 或 --rows将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。

举个栗子,例如某个大数据量的表,单行数据库结构设计最大是 1Kb

那这里划分10000000的话,单次使用的就是 9.5367431640625G 的内存

它消耗的是 TiDB 服务器的内存!如果单表过大会使 TiDB 服务器产生 OOM

tidb_distsql_scan_concurrency导出时的 session 变量减少 TiDB scan 操作的并发度
tidb_mem_quota_query该参数默认为 32GB,可控制 TiDB 单条查询语句的内存使用。如果有超大的表,遇到了 TiDB OOM 问题,建议调整这个参数到 8589934592 (8GB) 或更小
-o 或 --output导出文件路径 
-f 或 --filter导出能匹配模式的表*.*(导出所有库表),xxx.*(导出 xxx 库的所有表)
-F 或 --filesize将 table 数据划分出来的文件大小

需指明单位(如 128B64KiB32MiB1.5GiB

静静等待导出成功。我在这个过程中遇到了 OOM 问题,表象就是导出日志显示如下内容

  1. [mysql] 2021/02/08 11:47:18 packets.go:36: unexpected EOF
  2. [mysql] 2021/02/08 11:47:18 packets.go:122: closing bad idle connection: EOF
  3. [mysql] 2021/02/08 11:47:18 packets.go:122: closing bad idle connection: EOF
  4. [2021/02/08 11:47:18.558 +08:00] [ERROR] [main.go:230] ["dump failed error stack info"] [error="invalid connection"] [stack="main.main\n\t/home/jenkins/agent/workspace/ild_dumpling_multi_branch_v4.0.8/go/src/github.com/pingcap/dumpling/cmd/dumpling/main.go:230\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:203"]
  5. dump failed: invalid connection

这是因为 Dumpling 导出 TiDB 较大单表时,可能会因为导出数据过大导致 TiDB 内存溢出 (OOM),从而使连接中断导出失败。可以通过以下参数减少 TiDB 的内存使用。

  • 设置 --rows 参数,可以划分导出数据区块减少 TiDB 扫描数据的内存开销,同时也可开启表内并发提高导出效率。
  • 调小 --tidb-mem-quota-query 参数到 8589934592 (8GB) 或更小。该参数默认为 32GB,可控制 TiDB 单条查询语句的内存使用。
  • 调整 --params "tidb_distsql_scan_concurrency=5" 参数,即设置导出时的 session 变量 tidb_distsql_scan_concurrency 从而减少 TiDB scan 操作的并发度。

导入

部署 tidb-lightning 过程就不赘述了,可以看文档 https://docs.pingcap.com/zh/tidb/stable/deploy-tidb-lightning

第一步,配置 tidb-lightning.toml。对于没有出现在下述模版中的配置,TiDB Lightning 给出配置错误的提醒并退出。sorted-kv-dir需要设置为一个空的目录,并且确保所在的磁盘有较多空闲的空间。

  1. [lightning]
  2. # 日志
  3. level = "debug"
  4. file = "/home/service/var/data/tidb-util/push_log.log"
  5. [checkpoint]
  6. enable = true
  7. # 存储断点的数据库名称。
  8. schema = "tidb_lightning_checkpoint"
  9. # 存储断点的方式。
  10. # - file:存放在本地文件系统。
  11. # - mysql:存放在兼容 MySQL 的数据库服务器。
  12. driver = "file"
  13. [tikv-importer]
  14. # backend 设置为 local 模式
  15. backend = "local"
  16. # 设置本地临时存储路径
  17. sorted-kv-dir = "/home/service/var/data/tidb-util/sorted-kv-dir"
  18. [mydumper]
  19. # Mydumper 源数据目录。
  20. data-source-dir = "/home/service/var/data/tidb-util/pull_db"
  21. [tidb]
  22. # 目标集群的信息。tidb-server 的监听地址,填一个即可。
  23. # 这里注意,需要使用TiDB管理后台的 Cluster Info 中的 TiDB IP 地址
  24. host = "1.1.1.1"
  25. port = 4000
  26. user = "用户名"
  27. password = "密码"
  28. # 表架构信息在从 TiDB 的“状态端口”获取。
  29. status-port = 10080
  30. # pd-server 的地址,填一个即可
  31. # 这里注意,需要使用TiDB管理后台的 Cluster Info 中的 PD 信息
  32. pd-addr = "1.1.1.1:2379"

第二步,运行 tidb-lightning。如果直接在命令行中用 nohup 启动程序,可能会因为 SIGHUP 信号而退出,建议把 nohup 放到脚本里面,新建一个 shell 文件放在和 tidb-lightning 同级的目录,如:

  1. #!/usr/bin/env bash
  2. nohup ./tidb-lightning -config /home/service/var/data/tidb-util/conf/push.toml > /home/service/var/data/tidb-util/logs/start_push_log.log &

第三步,执行 sh start_push.sh

静静等待导入成功的日志打印

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树首页概览66154 人正在系统学习中

与[转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库相似的内容:

[转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库

本文介绍从 TiDB-A 库导出数据到 TiDB-B 库; 导出 Dumpling 包含在 tidb-toolkit 安装包中,可在此下载。 从 TiDB/MySQL 导出数据 需要的权限 SELECTRELOADLOCK TABLESREPLICATION CLIENT 导出到 sql 文件 先贴

[转帖]使用 Dumpling 和 TiDB Lightning 备份与恢复

本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量备份与恢复。 在备份与恢复场景中,如果需要全量备份少量数据(例如小于 50 GB),且不要求备份速度,你可以使用 Dumpling 从 TiDB 数据库导出数据进行备份,再使用 TiDB Lightning 将数据导入至

[转帖]TIDB - 使用 Dumpling 和 TiDB Lightning 迁移Mysql数据至TIDB中

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

[转帖]使用 Dumpling 导出数据

16 Contributors 使用数据导出工具 Dumpling,你可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份。Dumpling 也支持将数据导出到 Amazon S3 中。 要快速了解 Dumpling 的基本功能,建议先观看下面的培训视频

[转帖]TIDB - 使用BR工具进行数据热备份与恢复

一、BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。BR 只支持在 TiDB v3.1 及以上版本使用。 在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为一种备份的方式,并且导出的数据

[转帖]TIDB - 使用BR工具进行数据热备份与恢复

一、BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。BR 只支持在 TiDB v3.1 及以上版本使用。 在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为一种备份的方式,并且导出的数据

[转帖]使用 Dumpling 和 TiDB Lightning 备份与恢复

https://docs.pingcap.com/zh/tidb/stable/backup-and-restore-using-dumpling-lightning 本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量备份与恢复。 在备份与恢复场景中,如果需要全量备份少

[转帖]TiDB的使用限制

https://docs.pingcap.com/zh/tidb/stable/tidb-limitations 本文会将详细描述 TiDB 中常见的使用限制,包括:标识符长度,最大支持的数据库、表、索引、分区表、序列等的个数。 标识符长度限制 标识符类型最大长度(字符) Database 64 T

[转帖]TiDB Control 使用说明

https://docs.pingcap.com/zh/tidb/stable/tidb-control TiDB Control 是 TiDB 的命令行工具,用于获取 TiDB 状态信息,多用于调试。本文介绍了 TiDB Control 的主要功能和各个功能的使用方法。 注意 TiDB Contr

[转帖]TiDB 最佳实践

https://docs.pingcap.com/zh/tidb/stable/tidb-best-practices 本文档总结使用 TiDB 时的一些最佳实践,主要涉及 SQL 使用和 OLAP/OLTP 优化技巧,特别是一些 TiDB 专有的优化开关。 建议先阅读讲解 TiDB 原理的三篇文章