本文介绍从 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 或 --host IP地址 这里注意,需要使用TiDB管理后台的 Cluster Info 中的IP地址
-P 端口 一般情况都是4000
--filetype 导出类型

目前本文演示的是导出 sql

-t 或 --threads dumpling 并发线程数  
-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 库的更多相关文章

  1. Mysqlbinlog工具及导出数据并转换编码导入

    2014 - binlog是通过记录二进制文件方式来备份数据,然后在从二进制文件将数据恢复到某一时段或某一操作点. 1.使用mysqlbinlog工具来恢复 Mysqlbinlog日志如何开启? 在m ...

  2. oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理

    问题产生的操作步骤及详细说明: 1)操作的数据库是oracle 11g,先通过命令将用户GAS_NEW的数据导出,命令语句如下: expdp GAS_NEW/GAS_NEW@ORCL schemas= ...

  3. TiDB上百T数据拆分实践

    背景 提高TiDB可用性,需要把多点已有上百T TiDB集群拆分出2套 挑战 1.现有需要拆分的12套TiDB集群的版本多(4.0.9.5.1.1.5.1.2都有),每个版本拆分方法存在不一样 2.其 ...

  4. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. Vertica 导出数据测试用例

    需求:构建简单的测试用例,完成演示Vertica导出数据的功能. 测试用例:导出test业务用户t_jingyu表中的数据. 一.初始化测试环境 二.导出数据 2.1 vsql命令说明帮助 2.2 导 ...

  6. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

  7. 导出数据到Excel --使用ExcelReport有感

    先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...

  8. MySQL 导出数据

    MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上. 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 cnbl ...

  9. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  10. Dynamics CRM导出数据到Excel

    原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...

随机推荐

  1. linux内核initcall放置在各个section中函数执行流程

    前言 linux以及嵌入式一些代码,我们看到core_initcall.device_initcall等等需要链接器分配各个section,并且在启动该模块时候执行.下面我们详细追溯一下执行过程. 作 ...

  2. 【csharp】抽象类与接口有哪些不同?什么时候应该使用抽象类?

    抽象类与接口有哪些不同? 抽象类和接口是在面向对象编程中两个不同的概念,它们有一些重要的区别.以下是抽象类和接口的主要不同点: 抽象类(Abstract Class): 成员类型: 抽象类可以包含抽象 ...

  3. 以报时机器人为例详细介绍tracker_store和event_broker

      报时机器人源码参考[1][2],本文重点介绍当 tracker_store 类型为 SQL 时,events 表的表结构以及数据是如何生成的.以及当 event_broker 类型为 SQL 时, ...

  4. CodeForces 1141F2 贪心 离散化

    CodeForces 1141F2 贪心 离散化 题意 给定一个序列,要求我们找出最多数量的不相交区间,每个区间和都相等. 思路 一开始没有头绪,不过看到 \(n \le 1500\) 后想到可以把所 ...

  5. Flutter Getx 状态管理 --- (依赖管理) GetxController

    Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

  6. 基于AI的架构优化:创新数据集构造法提升Feature envy坏味道检测与重构准确率

    本文分享自华为云社区<华为云基于AI实现架构坏味道重构取得业界突破,相应文章已被软工顶会FSE 2023收录>,作者: 华为云软件分析Lab. 基于AI技术实现架构坏味道检测与重构建议是当 ...

  7. Spark的分布式存储系统BlockManager全解析

    摘要:BlockManager 是 spark 中至关重要的一个组件,在spark的运行过程中到处都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和机制,你才能更加 ...

  8. 网络ping不通,试试这8招

    摘要:网络ping不通,该怎么办?本文教你8个大招,轻松找到问题根源. 本文分享自华为云社区<网络ping不通,该怎么办?>,作者:wljslmz. 如下图,PC(192.168.10.1 ...

  9. openGemini内核源码正式对外开源

    摘要:openGemini是一个开源的分布式时序数据库系统,可广泛应用于物联网.车联网.运维监控.工业互联网等业务场景,具备卓越的读写性能和高效的数据分析能力. 本文分享自华为云社区<华为云面向 ...

  10. 收钱吧与火山引擎VeDI合作一年后 有了哪些新变化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群     收钱吧正在和火山引擎数智平台(VeDI)跑出一条业务提效新通路.   相关数据显示,收钱吧的日服务人次就近 ...