[转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库
本文介绍从 TiDB-A 库导出数据到 TiDB-B 库;
导出
Dumpling 包含在 tidb-toolkit 安装包中,可在此下载。
从 TiDB/MySQL 导出数据
需要的权限
- SELECT
- RELOAD
- LOCK TABLES
- REPLICATION CLIENT
导出到 sql 文件
先贴命令
-
nohup /home/service/var/data/tidb-util/dumpling \
-
-h IP地址 \
-
-P 端口 \
-
-u 用户名 \
-
-p 密码 \
-
--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 &
等同于
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 数据划分出来的文件大小 |
需指明单位(如 |
静静等待导出成功。我在这个过程中遇到了 OOM 问题,表象就是导出日志显示如下内容
-
[mysql] 2021/02/08 11:47:18 packets.go:36: unexpected EOF
-
[mysql] 2021/02/08 11:47:18 packets.go:122: closing bad idle connection: EOF
-
[mysql] 2021/02/08 11:47:18 packets.go:122: closing bad idle connection: EOF
-
[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"]
-
-
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需要设置为一个空的目录,并且确保所在的磁盘有较多空闲的空间。
[lightning] # 日志 level = "debug" file = "/home/service/var/data/tidb-util/push_log.log" [checkpoint] enable = true # 存储断点的数据库名称。 schema = "tidb_lightning_checkpoint" # 存储断点的方式。 # - file:存放在本地文件系统。 # - mysql:存放在兼容 MySQL 的数据库服务器。 driver = "file" [tikv-importer] # backend 设置为 local 模式 backend = "local" # 设置本地临时存储路径 sorted-kv-dir = "/home/service/var/data/tidb-util/sorted-kv-dir" [mydumper] # Mydumper 源数据目录。 data-source-dir = "/home/service/var/data/tidb-util/pull_db" [tidb] # 目标集群的信息。tidb-server 的监听地址,填一个即可。 # 这里注意,需要使用TiDB管理后台的 Cluster Info 中的 TiDB IP 地址 host = "1.1.1.1" port = 4000 user = "用户名" password = "密码" # 表架构信息在从 TiDB 的“状态端口”获取。 status-port = 10080 # pd-server 的地址,填一个即可 # 这里注意,需要使用TiDB管理后台的 Cluster Info 中的 PD 信息 pd-addr = "1.1.1.1:2379"
第二步,运行 tidb-lightning。如果直接在命令行中用 nohup 启动程序,可能会因为 SIGHUP 信号而退出,建议把 nohup 放到脚本里面,新建一个 shell 文件放在和 tidb-lightning 同级的目录,如:
-
#!/usr/bin/env bash
-
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
静静等待导入成功的日志打印
[转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库的更多相关文章
- Mysqlbinlog工具及导出数据并转换编码导入
2014 - binlog是通过记录二进制文件方式来备份数据,然后在从二进制文件将数据恢复到某一时段或某一操作点. 1.使用mysqlbinlog工具来恢复 Mysqlbinlog日志如何开启? 在m ...
- oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理
问题产生的操作步骤及详细说明: 1)操作的数据库是oracle 11g,先通过命令将用户GAS_NEW的数据导出,命令语句如下: expdp GAS_NEW/GAS_NEW@ORCL schemas= ...
- TiDB上百T数据拆分实践
背景 提高TiDB可用性,需要把多点已有上百T TiDB集群拆分出2套 挑战 1.现有需要拆分的12套TiDB集群的版本多(4.0.9.5.1.1.5.1.2都有),每个版本拆分方法存在不一样 2.其 ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Vertica 导出数据测试用例
需求:构建简单的测试用例,完成演示Vertica导出数据的功能. 测试用例:导出test业务用户t_jingyu表中的数据. 一.初始化测试环境 二.导出数据 2.1 vsql命令说明帮助 2.2 导 ...
- 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...
- 导出数据到Excel --使用ExcelReport有感
先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...
- MySQL 导出数据
MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上. 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 cnbl ...
- 使用Open xml 操作Excel系列之二--从data table导出数据到Excel
由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...
- Dynamics CRM导出数据到Excel
原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...
随机推荐
- 交换机SNMP配置
配置参考v2c为例 1.华为 snmp-agent protocol source-interface vlanif 1 ##S573x以上型号交换机需要snmp-agentsnmp-agent sy ...
- 防火墙添加允许服务器IP和端口方法
一.检测防火墙命令 systemctl status firewalld 如果显示如下active表示防火墙开启 ● firewalld.service - firewalld - dynamic f ...
- BeanDefinition解密:构建和管理Spring Beans的基石
本文分享自华为云社区<Spring高手之路11--BeanDefinition解密:构建和管理Spring Beans的基石>,作者: 砖业洋__ . BeanDefinition是Spr ...
- 实践解读丨Python 面向对象三大特征之多态
摘要:多态从字面意思上看就是多种形态,在我们python的面向对象里就是不同的对象在接收相同方法或者函数时会产生不同的行为,也就是说,每个对象可以用自己的方式去响应共同的函数,不同的方式实现不同的结果 ...
- Angular:都2021年了,你为啥还没用Angular
摘要:数据绑定是将应用程序UI或用户界面绑定到模型的机制.使用数据绑定,用户将能够使用浏览器来操纵网站上存在的元素. Web开发需要模型和视图之间的数据同步.这些模型基本上包含数据值,而视图则处理用户 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)
摘要:本期将详细介绍社区版Redis.kvrocks和Pika到GaussDB(for Redis)的迁移 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘第十期 ...
- 一文讲述G6实现流程图绘制的常用方法
摘要:G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等图可视化的基础能力. 本文分享自华为云社区<会用这些的api,轻松绘制流程图--antv.g6流程图入门>,作者: ...
- chrome对页面重绘和回流以及优化进行优化
页面的绘制时间(paint time)是每一个前端开发都需要关注的的重要指标,它决定了你的页面流畅程度.而如何去观察页面的绘制时间,找到性能瓶颈,可以借助Chrome的开发者工具. 回流与重绘 1. ...
- appuploder全过程使用教程(Windows版本)
转载:使用appuploader工具流程(Windows版本) 一.登录apple官网,注册账号 1.注册苹果账号 Sign In - Apple 2.登录开发者中心 ,出现协议弹框,同意即可. 二. ...
- 火山引擎 DataTester :让字节“跳动”起来的 A/B 实验平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流 火山引擎 DataTester 不仅对外提供服务,同时也是当前字节跳动内部所应用的 AB 实验平台. DataTes ...
