作者介绍
李淳竹(lichunzhu),TiDB 研发工程师。
Dumpling 是由 Go 语言编写的用于对数据库进行数据导出的工具。目前支持 MySQL 协议的数据库,并且针对 TiDB 的特性进行了优化。在 Go Dumpling! 让导出数据更容易 中,我们简要介绍了 Dumpling 的基本功能的使用。在本文中,我们将会介绍一些 Dumpling 的进阶使用方法,帮助大家更稳定高效地导出数据。
导出到云盘
Dumpling 已经在 v4.0.9 支持直接导出数据到 Amazon S3 云盘,仅需将 -o 参数指定为 "s3://${Bucket}/${Folder}" 并在环境变量中配置 AWS 密钥即可。而 Dumpling 的读写并行的设计也可以减少导出到云盘时的性能损失。在测试中我们将 Dumpling 运行在 AWS pod 中,开启多线程后 dumpling 导出速度可以达到 420MB/s。更多详细使用配置参考使用文档。导出为压缩文件
Dumpling 已经在 v4.0.9 中支持设置 --compress gz 将导出的 sql 文件压缩为 gz 格式,提高空间利用率,同时在上传云盘时也可以节省网络开销与存储成本。在我们的实际测试中,压缩为 gz 格式可以比直接导出 sql 格式文件节省一半以上的空间。
更多详细使用配置参考使用文档。
更完善的提示统计信息
在之前的使用过程中,有用户反馈在导出中 Dumpling 的提示信息不足,不能很好地了解 Dumpling 目前的导出状态。为此 Dumpling 在 v4.0.9 引入了更完善的信息提示机制。示例如下:
[2020/11/17 20:23:55.526 +08:00] [INFO] [collector.go:211] ["backup Success summary: total backup ranges: 45970, total success: 45970, total failed: 0, total take(backup time): 30m50.068578882s, total take(real time): 31m4.41078434s, total size(MB): 1797708.77, avg speed(MB/s): 971.70, total rows: 9200295024"] ["split chunk"=13.484064398s]
在导出任务结束后,Dumpling 会在 task summary 中显示本次导出过程的总共耗时,导出划分的 chunks,导出文件大小与 Dumpling 导出过程的平均速度等统计信息。# HELP dumpling_dump_finished_rows counter for dumpling finished rows
# TYPE dumpling_dump_finished_rows counter
dumpling_dump_finished_rows 1.419506e+06
# HELP dumpling_dump_finished_size counter for dumpling finished file size
# TYPE dumpling_dump_finished_size counter
dumpling_dump_finished_size 2.92577519e+08
在导出过程中,Dumpling 所用端口的 /metrics 地址也可以实时查询到 Dumpling 目前已导出的行数与数据大小。Dumpling 将会始终倾听社区声音并持续改进。如果大家有更多改进意见,也欢迎大家到 Dumpling repo 提出 issue 与贡献 PR。更完善的重试机制
在 v4.0.9 中,针对大数据导出的场景,Dumpling 加入了一系列重试机制来保证导出进程能够尽量排除网络波动的影响而顺利进行下去。主要包含了两个方面的重试机制:1. 在上传数据到云盘时进行重试Dumpling 向云盘服务器发送数据很容易因为网络波动导致传输失败。Dumpling 通过为传输 client 设置合理的参数来重试传输数据的 HTTP 请求。通常情况下 Dumpling 会对可重试的错误尝试发送数据 3 次,每次重试间会有逐步增加并引入抖动的等待间隔。2. 在数据库连接中断时进行重试在导出数据时数据库连接可能会不可避免地受到波动而中断。这时 Dumpling 会通过重建数据库连接的方式来尽量保证导出过程继续进行下去。这也会引出一个问题,Dumpling 提供了不同的一致性选项,贸然重建数据库连接将可能破坏导出快照的一致性。因此,Dumpling 针对不同的一致性配置做了不同的处理:- consistency 为
snapshot或none:这两种情况中,Dumpling 并没有为数据库上锁,Dumpling 会直接重建数据库连接。 - consistency 为
lock或flush:
--transactional-consistency=false 配置 Dumpling 在整个导出过程中持锁。这时如果发生 Dumpling 数据库连接中断的情况,Dumpling 将会首先检查锁数据库连接是否仍然工作正常,如果仍然正常 Dumpling 将会重建数据库连接使导出继续进行下去。支持控制导出时的系统变量
Dumpling 支持了通过 --params 参数设置导出数据库时 session 变量,配置格式为 "charactersetclient=latin1,charactersetconnection=latin1"。用户可以通过一系列配置参数来实现不同的导出场景:1. 设置导出字符集可以配置--params "character_set_client=latin1,character_set_connection=latin1,character_set_results=latin1”控制导出字符集为 latin1。2. 数据库导出内存控制配置 --params "tidb_distsql_scan_concurrency=5,tidb_mem_quota_query=8589934592" 减少 TiDB 导出时 scan 数据并发度与语句内存使用,从而减少 TiDB 导出时的内存使用。3. 数据库低速导出配置 --params "tidb-force-priority=LOW_PRIORITY,tidb_distsql_scan_concurrency=5" 可以调低导出语句执行优先级并减少 TiDB 导出时 scan 数据并发度,从而实现对数据库低影响的低速备份数据。上面参数列举了一些简单的 --params 使用场景。也欢迎大家开发出更多的使用场景,并向其他的社区小伙伴分享 Dumpling 的使用经验。Dumpling 后续开发计划
以下为 Dumpling 后续开发的一些计划与设想,也欢迎大家在 Dumpling Repo 一起交流讨论,参与开发。让我们一起让导出数据更加容易!- 支持并行导出 cluster index 的数据
- 支持 TiDB 标准错误码
- 支持导出更多种类的源数据库
欢迎联系我们:
Migrate SIG Community:主要涵盖 TiDB 数据处理工具,包含 TiDB 数据备份/导入导出,TiDB 数据变更捕获,其他数据库数据迁移至 TiDB 等。
channel #sig-migrate in the tidbcommunity slack workspace, you can join this channel through this invitation link。
? 文中划线部分均有跳转,请点击【

本文由 TiDB 研发工程师介绍 Dumpling 工具。它用 Go 语言编写,支持 MySQL 协议数据库,针对 TiDB 优化。文中介绍其进阶使用方法,如导出到云盘、压缩文件、完善提示统计信息、重试机制、控制导出系统变量等,还提及后续开发计划。

1187

被折叠的 条评论
为什么被折叠?



