写点什么

温故知新 | mydumper & dumpling 知识点汇总

  • 2022 年 7 月 11 日
  • 本文字数:3146 字

    阅读完需:约 10 分钟

作者: ShawnYan 原文来源:https://tidb.net/blog/6d3a8da2


“温故知新”系列,是指重新整理汇总那些有用但可能平时用不到的知识点,同时发掘、学习新的知识点以丰富知识体系。本文主要阐释 mydumperdumpling 工具的相关概念、使用方法,及其与 TiDB 的关联。



前置信息:


CentOS Linux release 7.9.2009 (Core)

MySQL 5.7.37

TiDB v5.4.0

mydumper v0.11.5-2

mydumper v0.9.5 with PingCAP customization

dumpling v5.4.0

mydumper 简介

mydummper是一个第三方工具,用来备份 MySQL(MariaDB、Percona)数据库。

缘起

The mydumper project was started at the beginning of 2009 by Domas Mituzas, and a few months ago we started collaborating and adding new features to improve performance and usability.


via. Percona Blog.

特性

  1. 支持多线程导出数据,速度更快。

  2. 支持一致性备份。

  3. 支持将导出文件压缩,节约空间。

  4. 支持多线程恢复。

  5. 支持以守护进程模式工作,定时快照和连续二进制日志。

  6. 支持按照指定大小将备份文件切割。

  7. 数据与建表语句分离。

  8. 比 mysqldump 速度快。

代码

最新版代码库:


安装

这里介绍两种安装方式:1. RPM 安装;2. 源码编译安装


  1. RPM 安装

  2. 源码编译安装

mydumper 使用方法

重要选项

摘取了一些重要的选项,列举如下:



注:


  • -z 或 --tidb-snapshot: 设置 tidb_snapshot 用于备份。默认值为当前 TSO(SHOW MASTER STATUS 输出的 Position 字段)。此参数可设为 TSO 或有效的 datetime 时间,例如:-z “2016-10-08 16:45:26”。

  • --no-locks: 在阿里云一些需要 super privilege 的云上面,mydumper 需要加上 –no-locks 参数,否则会提示没有权限操作。

常用备份命令

# 连接信息host=192.168.195.128pass=password
# 全实例备份mydumper -u root -p $pass -h $host -o /data/backup/full_instance# 全实例备份,压缩备份,并排除mysql,sys系统库mydumper -u root -p $pass -h $host -c --regex '^(?!(mysql\.|test\.|sys\.))' -o /data/backup/full_instance_compress# 备份指定库mydumper -u root -p $pass -h $host -B sbtest -o /data/backup/db_sbtest# 备份指定表mydumper -u root -p $pass -h $host -B sbtest -T t1,t2 -o /data/backup/db_sbtest_t1_t2# 只备份表结构mydumper -u root -p $pass -h $host -B sbtest -d -o /data/backup/db_sbtest_ddl# 只备份表数据mydumper -u root -p $pass -h $host -B sbtest -m -o /data/backup/db_sbtest_data
复制代码

备份文件命名

常见命名规则:


  1. metadata: 记录备份的开始、结束时间。

  2. database-schema-create.sql: 建库语句。

  3. database.table.sql: 该表的插入数据语句(若该表为空,则不存在此文件)。

  4. database.table-metadata: 记录该表的行数。

  5. database.table-schema.sql: 该表的创建语句。

mydumper 支持 TiDB

官方版本的 mydumper 对 TiDB 的支持。或者说,PingCAP 团队以将 mydumper 对 TiDB 的兼容性代码向上游提交 PR 并完成合并。


https://github.com/mydumper/mydumper/pull/155/


  • Add version detection for TiDB (detected_server).

  • Added support for tidb_snapshot option.

  • Auto-set tidb_snapshot to 1 second ago when TiDB detected.

  • Added optimization to dump _tidb_row id when it exists.



另外,从网络图中我们可以看出,从 16 年 10 月开始,PingCAP 创建了新的分支版本,并开始兼容性开发。



从 pingcap/mydumper 的代码提交记录和 PR 来看,定制版 mydumper 虽然依旧支持 TiDB v5,但是由于从 TiDB v4 开始已经正式发布了 dumpling 工具,并被其取代。同时,我们也可以清晰的从官方文档里看到这样的一条警告


PingCAP 之前维护的 Mydumper 工具 fork 自 mydumper project,针对 TiDB 的特性进行了优化。Mydumper 目前已经不再开发新功能,其绝大部分功能已经被 Dumpling 取代。Dumpling 工具使用 Go 语言编写,支持更多针对 TiDB 特性的优化。强烈建议切换到 Dumpling。

Dumpling 简介

Dumpling 一个支持热、温备的逻辑备份工具,是 mydumper 的全新升级版,基本用法类似于 mydumper,但也有所区别,可使用 tiup 进行管理。Dumpling 从 19 年 12 月开始着手开发,使用 Go 语言编写,整合了 mydumper 的原有功能,并做了一些改进。

代码


注:Dumpling merged into TiDB (#379)

Dumpling 的改进

相比 Mydumper,Dumpling 做了如下改进:


  1. 支持导出多种数据形式,包括 SQL/CSV。通过选项 --filetype string 进行控制,可以选择 sql 或 csv。关于 CSV 格式还有 4 个相关参数:--csv-delimiter, csv 文件中的定界符 (default “””)。--csv-null-value, csv 中的 null 值 (default “\N”)。--csv-separator, csv 文件中的分隔符 (default “,”)。

  2. 支持全新的 table-filter,筛选数据更加方便。整合了列表方式和正则方式,通过选项 -f, --filter strings 进行控制,默认值为:[*.*,!/^(mysql|sys|INFORMATION_SCHEMA|PERFORMANCE_SCHEMA|METRICS_SCHEMA|INSPECTION_SCHEMA)$/.*]语法可参考: README

  3. 支持导出到 Amazon S3 云盘。增加了一系列 S3 相关选项,具体有:



注:Export data to Amazon S3 cloud storage


  1. 针对 TiDB 进行了更多优化:

  2. 支持配置 TiDB 单条 SQL 内存限制。通过选项 --tidb-mem-quota-query uint 进行控制,单位为 bytes。

  3. 针对 TiDB v4.0.0 及更新版本支持自动调整 TiDB GC 时间。TiDB GC 相关概念可参考官方文档:

  4. 使用 TiDB 的隐藏列 _tidb_rowid 优化了单表内数据的并发导出性能。

  5. 对于 TiDB 可以设置 tidb_snapshot 的值指定备份数据的时间点,从而保证备份的一致性,而不是通过 FLUSH TABLES WITH READ LOCK 来保证备份一致性。相关参数:--snapshot string,需要配合参数 --consistency=snapshot一起使用。参数--consistency用于设定导出数据一致性级别,可设定为:1, auto: 默认值,MySQL flush, TiDB snapshot2, none: 不加锁 dump,无法保证一致性 3, flush: dump 前用 FTWRL4, lock: 对需要 dump 的所有表执行 lock tables read5, snapshot: 通过 tso 指定 dump 位置

Dumpling 所需权限

Dumpling 最小权限要求:select, reload, lock tables, replication client创建用户示例:


create user dumpling;grant select on *.* to dumpling;grant reload, lock tables, replication client on *.* to dumpling;
复制代码

常用备份命令

  • DSN 信息

  • 采用默认值直接执行备份

  • 备份全库,备份文件格式为 csv(--filetype),以 8 个线程执行备份 (-t),指定备份目录 (-o),并将日志输出到指定文件 (-L)

  • 备份指定表 (--database, -T),输出文件按 2000 行进行分块,并发执行数据导出到不同文件,以提升效率 (-r);输出的文件按 256MB 进行拆分 (-F)

  • 备份指定表数据, snapshot 的时间点为 “2022-02-24 21:19:00”

  • 备份指定表数据, 并控制 TiDB 单条查询语句的内存限制为 1G (--tidb-mem-quota-query)。

其他

使用 dumpling 时, 可将 tidb:performance.force-priority 优先级设定为 LOW_PRIORITY, 以降低备份对于集群的性能影响。

写在最后

如果您还在使用 TiDB v5.x 之前的版本,建议升级 TiDB,mydumper 只需了解即可。如果您已经在使用最新版的 TiDB,那么一定要熟悉 Dumpling 的常规使用。作为 Ti-DBA-er,我们应该对 TiDB 周边生态工具的过往、现在、未来都有所了解、熟悉,甚至参与其中。这样才能更好的维护线上 TiDB,更有效的保障系统稳定性。

相关资源


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
温故知新 | mydumper & dumpling 知识点汇总_TiDB 社区干货传送门_InfoQ写作社区