技术分享 | MySQL史上最快逻辑备份工具

【请关注】各类MySQL数据备份还原分享 MySQL数据备份是确保数据安全的重要任务,常用的备份方法包括逻辑备份和物理备份。逻辑备份工具如mysqldump和mysqlpump,支持全库、单表及事务备份,SELECT INTO OUTFILE可用于导出单表数据。物理备份方法包括直接复制数据目录和使用工具如Percona XtraBackup进行热备份。复制技术如主从复制和组复制也可作为实时备份方案。快照备份如LVM快照和云平台快照提供了快速备份选项。第三方工具如mydumper和Automysqlbackup提供了更高效的备份方案。备份策略应结合完 阅读详情

作者:洪斌
爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。
本文来源:转载自公众号-玩转MySQL
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


MySQL Shell 8.0.21 增加了一种新的逻辑备份恢复方法,有更快的备份恢复效率,支持zstd实时压缩,支持分块并行导出,load data并行导入,还能备份到OCI的对象存储。

  • util.dumpInstance() 用于备份整个实例
  • util.dumpSchemas() 用于备份指定schema
  • util.loadDump() 用于恢复备份

做了个对比测试,在零负载下mysql配置参数不变,备份/恢复相同schema,其中混合了大表和小表,看下这几种方式的实际效果如何。

##对比结果

结论

  • mysql shell

    ​使用默认参数zstd压缩+32M chunk并行导出,恢复时单表可以并行load data,其备份和恢复速度均优于非压缩+非分块。
    测试中发现,若禁用压缩,也会禁用分块。

  • mysqldump

    备份和恢复都是单线程执行,不压缩的备份效率更快,zstd的实时备份速度比gzip更快,恢复速度最慢。

  • mysqlpump

    备份支持并行速度也很快,但是单线程恢复是硬伤。

  • mydumper

    默认用gzip协议,备份速度与mysqldump基本一样,看来瓶颈在压缩上。 在非压缩非分块备份速度会更快。 恢复速度中等,单表无法并行。

综合上述测试结果,mysql shell新的备份恢复方式是最快的,得益于使用了zstd实时压缩算法,备份恢复均可以并行,对于单个大表也可以并行。

下面是部分测试过程供参考:

MySQLShell
utli.dumpSchemas/utli.loadDump

  • 备份
Acquiring global read lock
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
Preparing data dump for table `test`.`customer1`
Writing DDL for schema `test`
Writing DDL for table `test`.`sbtest1`
Writing DDL for table `test`.`customer1`
Writing DDL for table `test`.`sbtest10`
Data dump for table `test`.`customer1` will be chunked using column `c_w_id`
Preparing data dump for table `test`.`sbtest1`
Data dump for table `test`.`sbtest1` will be chunked using column `id`
Preparing data dump for table `test`.`sbtest10`
Data dump for table `test`.`sbtest10` will be chunked using column `id`
Preparing data dump for table `test`.`sbtest2`
Data dump for table `test`.`sbtest2` will be chunked using column `id`
Preparing data dump for table `test`.`sbtest4`
Data dump for table `test`.`sbtest4` will be chunked using column `id`
Preparing data dump for table `test`.`sbtest6`
Data dump for table `test`.`sbtest6` will be chunked using column `id`
Preparing data dump for table `test`.`sbtest8`
Data dump for table `test`.`sbtest8` will be chunked using column `id`
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing DDL for table `test`.`sbtest2`
Writing DDL for table `test`.`sbtest4`
Writing DDL for table `test`.`sbtest6`
Writing DDL for table `test`.`sbtest8`
Data dump for table `test`.`customer1` will be written to 3 files
Data dump for table `test`.`sbtest10` will be written to 1 file
Data dump for table `test`.`sbtest2` will be written to 1 file
Data dump for table `test`.`sbtest4` will be written to 1 file
Data dump for table `test`.`sbtest6` will be written to 1 file
Data dump for table `test`.`sbtest8` will be written to 1 file
Data dump for table `test`.`sbtest1` will be written to 160 files
1 thds dumping - 98% (10.46M rows / ~10.62M rows), 589.52K rows/s, 115.55 MB/s uncompressed, 51.66 MB/s compressed
Duration: 00:00:18s
Schemas dumped: 1
Tables dumped: 7
Uncompressed data size: 2.06 GB
Compressed data size: 922.35 MB
Compression ratio: 2.2
Rows written: 10464999
Bytes written: 922.35 MB
Average uncompressed throughput: 109.46 MB/s
Average compressed throughput: 48.97 MB/s
  • 恢复
util.loadDump("test1")
Loading DDL and Data from 'instance' using 4 threads.
Target is MySQL 8.0.21. Dump was produced from MySQL 8.0.21
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL script for schema `test`
Executing DDL script for `test`.`sbtest1`
Executing DDL script for `test`.`sbtest4`
Executing DDL script for `test`.`sbtest2`
Executing DDL script for `test`.`sbtest8`
Executing DDL script for `test`.`sbtest10`
Executing DDL script for `test`.`sbtest6`
Executing DDL script for `test`.`customer1`
...
[Worker000] test@sbtest1@158.tsv.zst: Records: 65736  Deleted: 0  Skipped: 0  Warnings: 0
Executing common postamble SQL
​
168 chunks (10.46M rows, 2.06 GB) for 7 tables in 1 schemas were loaded in 1 min 26 sec (avg throughput 23.97 MB/s)
mysqldump

  • 备份
/usr/bin/time mysqldump -umsandbox -pmsandbox -h127.0.0.1 -P8021 test | gzip > db.sql.gz
mysqldump: [Warning] Using a password on the command line interface can be insecure.
      169.40 real        24.65 user         1.34 sys
  • 恢复
 /usr/bin/time gzip -d < db.sql.gz | ./use test
      257.11 real         9.74 user         0.55 sys
mysqlpump

  • 备份
/usr/bin/time mysqlpump --default-parallelism=4 -umsandbox -pmsandbox -h127.0.0.1  -P8021 test | gzip > db2.sql.gz
Dump progress: 6/7 tables, 10421749/10406264 rows
Dump completed in 185352
      185.50 real        31.18 user         6.34 sys
  • 恢复
/usr/bin/time gzip -d < db2.sql.gz | ./use test
      121.17 real         9.66 user         0.76 sys
mydumper/myloader

  • 备份
/usr/bin/time mydumper -u msandbox -p msandbox -h 127.0.0.1 -P 8021 -B test -t 4 -v 3 -c -o dumper
** Message: 21:44:55.958: Connected to a MySQL server
** Message: 21:44:56.319: Started dump at: 2020-07-24 21:44:56
​
** Message: 21:44:56.341: Written master status
** Message: 21:44:56.420: Thread 1 connected using MySQL connection ID 22
** Message: 21:44:56.537: Thread 2 connected using MySQL connection ID 23
** Message: 21:44:56.651: Thread 3 connected using MySQL connection ID 24
** Message: 21:44:56.769: Thread 4 connected using MySQL connection ID 25
** Message: 21:44:56.878: Non-InnoDB dump complete, unlocking tables
** Message: 21:44:56.878: Thread 4 dumping data for `test`.`sbtest10`
** Message: 21:44:56.878: Thread 1 dumping data for `test`.`customer1`
** Message: 21:44:56.878: Thread 3 dumping data for `test`.`sbtest1`
** Message: 21:44:56.878: Thread 2 dumping data for `test`.`sbtest2`
** Message: 21:44:57.139: Thread 2 dumping data for `test`.`sbtest4`
** Message: 21:44:57.143: Thread 4 dumping data for `test`.`sbtest6`
** Message: 21:44:57.396: Thread 2 dumping data for `test`.`sbtest8`
** Message: 21:44:57.398: Thread 4 dumping schema for `test`.`customer1`
** Message: 21:44:57.409: Thread 4 dumping schema for `test`.`sbtest1`
** Message: 21:44:57.419: Thread 4 dumping schema for `test`.`sbtest10`
** Message: 21:44:57.430: Thread 4 dumping schema for `test`.`sbtest2`
** Message: 21:44:57.441: Thread 4 dumping schema for `test`.`sbtest4`
** Message: 21:44:57.453: Thread 4 dumping schema for `test`.`sbtest6`
** Message: 21:44:57.464: Thread 4 dumping schema for `test`.`sbtest8`
** Message: 21:44:57.475: Thread 4 shutting down
** Message: 21:44:57.636: Thread 2 shutting down
** Message: 21:45:03.706: Thread 1 shutting down
** Message: 21:47:40.297: Thread 3 shutting down
** Message: 21:47:40.307: Finished dump at: 2020-07-24 21:47:40
      164.54 real       167.58 user         2.28 sys

注:使用的并行备份线程数与dumpSchema相同。

  • 恢复
/usr/bin/time myloader -u msandbox -p msandbox -h 127.0.0.1 -P 8021 -B test -t 4 -v 3  -d dumper/
** Message: 23:54:39.961: 4 threads created
** Message: 23:54:39.973: Creating table `test`.`sbtest4`
** Message: 23:54:40.055: Creating table `test`.`sbtest10`
** Message: 23:54:40.127: Creating table `test`.`customer1`
** Message: 23:54:40.201: Creating table `test`.`sbtest8`
** Message: 23:54:40.273: Creating table `test`.`sbtest2`
** Message: 23:54:40.346: Creating table `test`.`sbtest6`
** Message: 23:54:40.423: Creating table `test`.`sbtest1`
** Message: 23:54:40.488: Thread 2 restoring `test`.`sbtest2` part 0
** Message: 23:54:40.488: Thread 3 restoring `test`.`sbtest6` part 0
** Message: 23:54:40.488: Thread 4 restoring `test`.`sbtest8` part 0
** Message: 23:54:40.488: Thread 1 restoring `test`.`sbtest4` part 0
** Message: 23:54:40.833: Thread 2 restoring `test`.`sbtest1` part 0
** Message: 23:54:40.833: Thread 4 restoring `test`.`sbtest10` part 0
** Message: 23:54:40.834: Thread 3 restoring `test`.`customer1` part 0
** Message: 23:54:40.834: Thread 1 shutting down
** Message: 23:54:41.070: Thread 4 shutting down
** Message: 23:54:50.407: Thread 3 shutting down
** Message: 23:57:46.425: Thread 2 shutting down
      187.10 real        14.24 user         1.97 sys
Mysql运维篇(三) MySQL备份与恢复 路虽远行则将至,事虽难做则必成! 滴水穿石,聚沙成塔! 感谢优快云各位大佬的经典博文,在迷茫时能够拨云见日,指点迷津,让我继续一路前行! 如有侵权,请留言,我及时删除 阅读详情

相关推荐

MySQL数据库-备份及恢复快速上手

今天给伙伴们分享一下MySQL数据库-备份及恢复,希望看了有所收获。

mohuanfenghuang的博客 1088

MySQL Shell实用导入程序

简介 MySQL Shell的导入程序util.loadDump(url[, options]),在MySQL Shell 8.0.21中引入,支持导入MySQL并行导入数据、进度状态跟踪、恢复和重置功能。 备注: 导入工具使用的是LOAD DATA LOCAL INFILE语法,所以需要设置local_infile参数为ON,设置方式:set global local_infile=ON; sql_require_primary_key系统变量如果ON,且导入的表中存在没有主键的表,则导入会报错,默认

十五十六 1470

unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边

1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适) // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General"

weixin_42065078的博客 1745

mysqlShell常用汇总(管理mgr集群、备份恢复、导入导出)

mysqlShell MGR

liuzhijian2008x的专栏 3762

别再踩坑了!手把手教你用EB Tresos Studio创建Autosar MCAL工程(含模块配置避坑指南)

本文详细介绍了使用EB Tresos Studio创建Autosar MCAL工程的完整流程,包括工程创建前的关键准备、模块配置的避坑指南以及工程验证与代码生成的实用技巧。通过实战案例和黄金准则,帮助开发者高效完成MCAL工程创建,避免常见错误,提升开发效率。

weixin_42536058的博客 443

【win11+vs 2017+OpenCV4.5.5+Qt5.12配置】详细安装过程+小问题解决

由于Qt5无法与最新的vs2022兼容,扩展工具中一直显示不可用,所以将vs降级成vs2017。在安装Qt的过程中,会选择安装Qt套件,其中就的MCVS 2017,说明vs2017是与qt兼容的。当然也可以用qt creator这一原生IDE。OpenCV版本目前是最新的4.8.0,使用过程中没有什么问题,但是还是安装低版本大概率避免一些玄学问题。

qq_45306739的博客 3350

数据备份工具 MySQL Shell Dump & Load

数据库备份。

qq_34478339的博客 1300

(53页PPT)新型智慧病房整体解决方案(附下载方式)

当前医疗场景存在三大核心矛盾:院内感染风险(如输液异常发现滞后)、信息孤岛现象(11类业务系统数据割裂)、管理效能不足(30%护理时间耗费在机械性工作)。实际案例显示,整体运营效率提升40%,患者满意度提高28个百分点,真正实现了"让技术有温度,让数据会说话"的价值理念。本文将从需求分析、技术架构、应用场景三个维度,深度剖析这份53页解决方案的创新价值与实践路径。床旁智能终端整合12项功能:包括体征自动采集(误差率<1%)、医嘱执行核对(100%条码校验)、智能床垫离床报警(响应时间3秒)等。

AI_data_cloud的博客 715

使用MySQL Shell进行MySQL逻辑备份

我们的网站在增长,这当然是一个非常受欢迎的趋势,但也有不利的一面:我们数据库中的数据也在大幅增长。我们改变了我们的流程,定期从我们的主数据库中归档我们最大的表数据,但这并没有解决所有问题,尤其是我们的逻辑备份/恢复程序仍然变得越来越繁琐。 最近,我们仔细研究了这个问题,目的是创建我们的逻辑数据库转储并再次快速恢复它们。并且肯定有一些地方可以从根本上优化!大多数更改都有一个共同点:MySQL shell。 注意:这篇文章将假设一个正在运行的 MySQL 服务器,仅仅是因为我们自己使用它。它也应该适用于

allway2的博客 1775

【考试大纲】中级多媒体应用设计师考试大纲

中级多媒体应用设计师考试大纲

邓邓子的博客 382

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

MySQL史上最快逻辑备份工具

MySQL Shell 8.0.21 增加了一种新的逻辑备份恢复方法,有更快的备份恢复效率,支持zstd实时压缩,支持分块并行导出,load data并行导入,还能备份到OCI的对象存储。 util.dumpInstance() 用于备份整个实例 util.dumpSchemas() 用于备份指定schema util.loadDump() 用于恢复备份 做了个对比测试,在零负载下mysql配置参数不变,备份/恢复相同schema,其中混合了大表和小表,看下这几种方式的实际效果如何。 对比结果 结论

qq_40907977的博客 1890

Cadence PSpice 模型1:基于自带库新建二极管的PSpice模型图文教程

使用Cadence PSpice进行电路图的仿真时,难免会遇到软件自带库中没有合适的元器件的情况,这就需要设计师自己新建元器件模型,本文详细介绍使用PSpice软件修改自带库的元器件模型的参数以得到自己需要的PSpice模型库的方法。

fydar的博客 4413

mysql 逻辑备份工具_关于mysql:技术分享-MySQL史上最快逻辑备份工具

作者:洪斌爱可生南区负责人兼技术服务总监,MySQL ACE,善于数据库架构布局、故障诊断、性能优化剖析,实践经验丰盛,帮忙各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。本文起源:转载自公众号-玩转MySQL*爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。MySQL Shell 8.0.21 减少了一种新的逻辑...

weixin_39832965的博客 195

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7064

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql 备份工具 mb_技术分享 | MySQL 史上最快逻辑备份工具

作者:洪斌爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。本文来源:转载自公众号-玩转MySQL*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。MySQL Shell 8.0.21 增加了一种新的逻辑备...

weixin_39611863的博客 241

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

pm961 mysql_技术分享 | MySQL史上最快逻辑备份工具

作者:洪斌爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。本文来源:转载自公众号-玩转MySQL*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。MySQL Shell 8.0.21 增加了一种新的逻辑...

weixin_39561673的博客 142

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql utl_file_技术分享 | MySQL史上最快逻辑备份工具

作者:洪斌爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。本文来源:转载自公众号-玩转MySQL*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。MySQL Shell 8.0.21 增加了一种新的逻辑...

weixin_36435325的博客 143

MySQL物理备份和逻辑备份工具及原理——让小白也能看懂!

MySQL备份指南:物理备份与逻辑备份详解 本文全面介绍了MySQL数据库备份的两种主要方式。物理备份直接复制数据库文件(如.ibd、.frm),速度快但占用空间大;逻辑备份导出SQL语句,通用性强但恢复较慢。文章详细对比了两者的优缺点,推荐了常用工具(XtraBackup、mysqldump等),并提供了最佳实践建议:生产环境优先物理备份,开发环境可用逻辑备份,同时建议采用"物理+逻辑"双备份策略。最后强调备份的核心目标是"能恢复",建议定期测试备份可用性。

dblens_com的博客 658

MySQL-基于XtraBackup实现逻辑备份

XtraBackup是一个用于MySQL和Percona Server的开源热备份工具,它由Percona开发。XtraBackup支持两种备份类型:完整备份(full backup)和增量备份(incremental backup)。我用了一段时间,感觉还不错哦,感兴趣的可以看一下

leen的博客 1209

MySQL 备份工具分享(二):增量备份功能

以全量备份文件作为基线快照,然后增量备份记录“从上一备份结束到当前”的数据变更(基于 MySQL binlog)。本工具在保留原有全量能力的前提下,新增了基于 binlog 的增量备份与组合恢复,与全量形成一条清晰的备份链

云泽的博客 542

【mysql】mysql之备份

  一、mysql数据备份    1.备份的原因    2.备份的类型    3.备份的策略    4.备份方式     1)逻辑备份     2)物理备份   二、mysqldump客户端    1.常用参数    2.注意:   三、企业案例    1.背景    2.思路    3.模拟案例     1)模拟生产数据     2)模拟23:00全备     3)模拟23:00到10:00的数据操作     4)模拟删库    4

zerotoall的博客 1252

企业级MySQL数据库备份方案 增量备份、全量备份、逻辑备份_3

在介绍完备份方式之后,再来介绍一下,增量与全量备份这两个概念。

szh_28的博客 965

MySQL - 备份工具选型:mysqldump vs xtrabackup 优缺点分析

MySQL备份工具选型:mysqldump vs xtrabackup分析 本文对比了MySQL两种主流备份工具的优缺点。mysqldump是MySQL官方提供的逻辑备份工具,通过SQL语句导出数据,具有简单易用、跨平台兼容的优点,但存在性能开销大、恢复速度慢等缺点。XtraBackup是Percona开发的物理备份工具,支持热备份和增量备份,适合大型数据库,但配置较复杂。文章详细介绍了两种工具的工作原理、使用场景和常用命令,并提供了Java调用示例,帮助开发者根据业务需求选择合适的备份方案。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

【热门主题】000019 MySQL 数据库备份与恢复:高效策略与工具详解

在选择 MySQL 数据库备份工具时,需要根据实际情况综合考虑备份需求、数据库规模、性能要求等因素,选择最适合的工具来确保数据的安全和可恢复性。

宝码香车的博客 2432
上一篇: 第18问:MySQL CPU 高了,怎么办?
下一篇: 第04期:Prometheus 数据采集(三)
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值