mysqldump和mydumer时间的比较

本文通过实测对比了mydumper和mysqldump在MySQL备份过程中的性能表现,mydumper凭借多线程优势,在处理相同数据量时显著缩短了备份时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标: 测试mydumper和mysqldump之间的性能;

 

环境: mysql 5.6.36  

 

mydumper安装

yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake
wget https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
tar zxvf mydumper-0.9.1.tar.gz
cd mydumper-0.9.1/cmake .
make
make install

 mydumper介绍

MySQL自身的mysqldump工具支持单线程工作,依次一个个导出多个表,没有一个并行的机,这就使得它无法迅速的备份数据。

 

mydumper作为一个实用工具,能够良好支持多线程工作,可以并行的多线程的从表中读入数据并同时写到不同的文件里,这使得它在处理速度方面快于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样,mydumper能更好的完成备份任务。

①多线程备份

②因为是多线程逻辑备份,备份后会生成多个备份文件

③备份时对MyISAM表施加FTWRL(FLUSH TABLES WITH READ LOCK),会阻塞DML语句

④保证备份数据的一致性

⑤支持文件压缩

⑥支持导出binlog

⑦支持多线程恢复

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

⑨支持将备份文件切块

 

测试脚本:

#!/bin/bash


#test mysqldump and mydump time
#purge query cache
/export/servers/mysql/bin/mysql --login-path=localhost -e "flush tables;"
t1_mydumper=`date +"%s"`
echo "before run time:  $t1_mydumper"
#backup
/usr/local/bin/mydumper -u username -h address -P 3358 -p password-o /export/data/dbbak/bak_mydumper -t 20
t2_mydumper=`date +"%s"`
echo "after run time: $t2_mydumper"
interval=`expr $t2_mydumper - $t1_mydumper`
echo "interval seconds  is: $interval"
echo "the backup size is `du -sh /export/data/dbbak/bak_mydumper`"

sleep 10

#flush cache
/export/servers/mysql/bin/mysql --login-path=localhost -e "flush tables;"
#test mysqldump and mydump time
t1_mydumper=`date +"%s"`
echo "before run time:  $t1_mydumper"
#backup
mysqldump -u username -h address -P 3358  -p password --single-transaction -A >  /export/data/dbbak/bak_mysqldumpe/dumper.sql
t2_mydumper=`date +"%s"`
echo "after run time: $t2_mydumper"
interval=`expr $t2_mydumper - $t1_mydumper`
echo "interval seconds  is: $interval"
echo "the backup size is `du -sh /export/data/dbbak/bak_mysqldumpe`"

执行结果如下:

[root@A02-R05-I41-72-516WMTW dbbak]# cat test.log 
before run time:  1537448401
after run time: 1537448432
interval seconds  is: 31
the backup size is 4.5G	/export/data/dbbak/bak_mydumper
before run time:  1537448442
after run time: 1537448489
interval seconds  is: 47
the backup size is 4.5G	/export/data/dbbak/bak_mysqldumpe

由结果可知,同样备份4.5G的数据,mydumper开启20个线程并发花费31s,mysqldump 47s

把脚本中-t 20改为50,测试50线程并发

[root@A02-R05-I41-72-516WMTW dbbak]# sh testbak.sh 
before run time:  1537456671

** (mydumper:15256): CRITICAL **: Couldn't acquire global lock, snapshots will not be consistent: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation
after run time: 1537456699
interval seconds  is: 28
the backup size is 4.5G	/export/data/dbbak/bak_mydumper
before run time:  1537456709
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
after run time: 1537456757
interval seconds  is: 48
the backup size is 4.5G	/export/data/dbbak/bak_mysqldumpe
[root@A02-R05-I41-72-516WMTW dbbak]# 

开启50个线程并发,花费28s, mysqldump是48s,相差将近一倍;

当然,开销也是会增大的

 

CPU核数12     
内存64G     
硬盘1.1T非SSD     
       
       
备份方式并发数mysql下文件大小dump文件大小CPU(%)IO(%)耗时(秒)
mydumper1149G72G18%20%1274
mydumper2149G72G28%58%639
mydumper3149G72G34%78%509
mydumper4149G72G36%88%496
mydumper5149G72G39%92%441
mysqldumpmysqldump149G73G12%26%1340
### mysqldump 与 Navicat 的对比 #### 工具性质 `mysqldump` 是 MySQL 官方提供的一种命令行实用程序,专门用于逻辑备份。它能够创建 SQL 脚本文件,这些脚本可以在其他服务器上执行以重建原始数据库结构数据[^1]。 Navicat 则是一个图形化的数据库管理工具,支持多种数据库系统,包括 MySQL。通过直观的界面操作,用户可以方便地管理维护数据库对象以及执行各种任务,比如设计表、查询编辑器、导入/导出功能等[^2]。 #### 备份方式 使用 `mysqldump` 进行备份时,通常是在终端输入特定参数来指定要备份的目标数据库及其选项: ```bash mysqldump -u root -p database_name > backup_file.sql ``` 而利用 Navicat 实现相同目的,则只需点击几下鼠标即可完成设置并启动整个过程。在软件界面上选择相应的菜单项或按钮后,按照向导提示填写必要信息便能自动生成所需的备份文件。 #### 恢复流程 对于由 `mysqldump` 创建出来的 `.sql` 文件,在目标环境中重新加载内容可以通过如下指令实现: ```bash mysql -u root -p new_database < backup_file.sql ``` 相比之下,借助于 Navicat 来恢复之前保存的数据集更加简便快捷。只需要打开应用程序,找到对应的项目节点右键单击选取“运行SQL文件”,再挑选事先准备好的`.sql`文档就能顺利实施迁移动作。 #### 功能特性 - **灵活性**: `mysqldump` 提供了大量的定制化选项,允许精确控制哪些部分应该被包含到最终输出里;相反地,尽管 Navicat 同样具备一定范围内的调整能力,但在细节程度方面可能不及前者深入。 - **易用性**: 对新手来说,GUI 形式的交互显然更友好一些——即指采用像 Navicat 那样的可视化平台来进行日常运维活动会显得更为轻松容易理解。不过熟练掌握 shell 命令之后也会发现 CLI 方式效率极高。 - **性能表现**: 当处理大规模数据量的时候,基于文本流传输机制构建起来的服务端程序往往具有更好的吞吐率优势。因此如果面对的是海量级别的记录条目的话,那么直接调用 `mysqldump` 可能要比依赖客户端应用更快捷有效得多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值