MySQL5.7新特性之备份工具mysqlpump的使用

本文介绍了mysqlpump备份工具的备份原理、优势及使用注意事项。详细解释了mysqlpump的参数配置方法,并通过与mysqldump工具的对比,展示了mysqlpump在备份速度上的优势。

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

一、前言
mysql在备份方面本身有mysqldump工具来进行数据备份,但是该工具只支持单线程工作,这就使得备份数据的速度大大降低。mysql官方从5.7开始推出了mysqlpump工具,该工具在mysqldump的基础上又新增了很多新功能,使用起来更加直观,备份速度也有了一定的提升,具体如下:


二、mysqlpump备份原理:
mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库,从而达到提升备份速度的功能。
5c81d4e28a66277f487e6807aa98f9ff06139321

三、mysqlpump工具的优势:
  • 基于表并行备份数据库和数据库中的对象的,加快备份过程。(--default-parallelism)
  • 更好的控制数据库和数据库对象(表,存储过程,用户帐户)的备份。
  • 备份用户账号作为帐户管理语句(CREATE USER,GRANT),而不是直接插入到MySQL的系统数据库。
  • 备份出来直接生成压缩后的备份文件。
  • 备份进度指示,观察备份进度更直观。
  • 重新加载(还原)备份文件,先建表后插入数据最后建立索引,减少了索引维护开销,加快了还原速度。
  • 备份可以排除或则指定数据库。

四、mysqlpump工具使用的注意点:
  • 官方表示在mysql5.7.11之前无法保证数据的一致性,所以5.7.11之前该工具基本无法使用
  • mysqlpump的多线程备份是基于表的,当数据库中有很多张小表个别几张超大表的时候,mysqlpump的备份速度其实还不如mysqldump。
五、mysqlpump基本参数使用:
 -u                          备份用户名
 -p                          指定用户名密码
 -P                          连接数据库端口
 -h                          指定数据库地址
 --login-path=#              可以支持面密码备份数据
 -A, --all-databases 	     备份所有数据库
 --character-sets-dir=name   指定备份数据导出字符集
 --compress-output=name      将备份数据压缩输出,目前支持的压缩算法有LZ4和ZLIB
 -B, --databases             指定备份数据库,多个库之间用逗号分隔
 --default-parallelism=#     备份并行线程数,默认为2,若指定该参数为0,则表示不使用并行备份。
 --defer-table-indexes 	     延迟创建索引,将全部数据备份结束后再创建索引,默认开启。使用mysqldump备份时会先创建表和索引,然后加载原数据,资源消耗不仅有备份还有对二级索引的维护
 --exclude-databases=name    备份时排除该参数指定的数据库,多个数据库之前使用,分隔
 --exclude-tables=name       备份时排除该参数指定的表,多个表之前使用,分隔
 --include-databases=name    备份指定数据库,多个数据库之前使用,分隔
 --include-tables=name       备份指定表,多个表之前使用,分隔
 --parallel-schemas=[N:]db_list    指定并行备份的库,多个库之间用逗号分隔。也可以直接指定备份该库启用的线程队列数,若不指定则有-default-parallelism参数决定,默认为2。              
 -d, --skip-dump-rows        只备份表结构,不备份数据
 --users                     备份数据库用户,备份形式为create user ... ,grant ....
                             如果只需要备份数据库账号可以使用 mysqlpump --exclude-databases=% --users
 --watch-progress            显示备份进度,默认开启
 --single-transaction        对于innodb表,在备份开始的时候会开启一个事物,并且设置隔离级别为RR,保证备份数据的一致性。备份期间应避免DDL。
                             在MySQL5.7.11之前,--defaut-parallelism大于1的时候和该参数互斥,所以必须使用--default-parallelism=0。
                             MySQL 5.7.11后解决了--single-transaction和--default-parallelism互斥的问题。

六、性能测试:
每次测试之前都要重启数据库,清除缓冲池中的内容。
1.mysqlpump压缩test2库
# time mysqlpump -uroot -p --single-transaction --default-parallelism=3  -B test2 >test2_db.sql
Enter password: 
Dump progress: 1/2 tables, 0/1872 rows
Dump progress: 30/134 tables, 342783/5569940 rows
Dump progress: 32/134 tables, 766796/5569940 rows
Dump progress: 37/134 tables, 1004147/5569940 rows
Dump progress: 37/134 tables, 1079147/5569940 rows
Dump progress: 37/134 tables, 1235147/5569940 rows
Dump progress: 39/134 tables, 1540083/5569940 rows
Dump progress: 45/134 tables, 1865938/5569940 rows
Dump progress: 47/134 tables, 1985771/5569940 rows
Dump progress: 48/134 tables, 2066897/5569940 rows
Dump progress: 51/134 tables, 2134073/5569940 rows
Dump progress: 51/134 tables, 2210823/5569940 rows
Dump progress: 57/134 tables, 2409504/5569940 rows
Dump progress: 59/134 tables, 2466028/5569940 rows
Dump progress: 63/134 tables, 2537666/5569940 rows
Dump progress: 66/134 tables, 2779272/5569940 rows
Dump progress: 70/134 tables, 2917791/5569940 rows
Dump progress: 112/134 tables, 3003742/5569940 rows
Dump progress: 115/134 tables, 3299305/5569940 rows
Dump progress: 115/134 tables, 3525305/5569940 rows
Dump progress: 117/134 tables, 3749419/5569940 rows
Dump progress: 118/134 tables, 3893110/5569940 rows
Dump progress: 127/134 tables, 3940505/5569940 rows
Dump progress: 127/134 tables, 4307505/5569940 rows
Dump progress: 130/134 tables, 4745939/5569940 rows
Dump progress: 130/134 tables, 5193439/5569940 rows
Dump progress: 130/134 tables, 5382939/5569940 rows
Dump progress: 132/134 tables, 5538375/5569940 rows
Dump completed in 36222 milliseconds

real 0m38.179s
user 0m14.237s
sys 0m3.782s


        2.mysqldump备份test2库
# time mysqldump -uroot -p --single-transaction test2 >test2_db2.sql
Enter password: 

real 0m47.764s
user 0m10.009s
sys 0m1.619s





### MySQL 5.7 中 `mysqlpump` 工具的功能与使用 #### 功能概述 `mysqlpump` 是 MySQL 5.7 及以上版本提供的一款逻辑备份工具,相较于传统的 `mysqldump` 工具有更高的性能和灵活性。它支持并发操作,能够显著提升大型数据库备份效率[^3]。 以下是 `mysqlpump` 的主要功能特性: - **并发备份**:通过并行处理多个表或数据库来加速备份过程。 - **对象过滤**:允许指定要备份的对象范围(如特定的数据库、表),或者排除某些对象。 - **自定义选项**:可以设置各种参数以满足不同的备份需求,例如是否包含事件、例行程序等元数据。 - **高效压缩**:生成更紧凑的 SQL 文件,减少磁盘占用和传输时间。 --- #### 基本语法 `mysqlpump` 的基本命令结构如下: ```bash mysqlpump [options] > output_file.sql ``` 其中 `[options]` 表示可选参数列表,而 `output_file.sql` 则是保存备份文件的目标路径。 --- #### 实际应用案例 ##### 1. 备份所有数据库 如果需要对整个实例中的所有数据库执行全量备份,则可以直接运行以下命令: ```bash mysqlpump -u root -p --all-databases > full_backup_$(date +%Y%m%d).sql ``` 此脚本会将当前日期嵌入到输出文件名中以便于管理,并提示输入密码完成身份验证[^2]。 ##### 2. 单独备份某个数据库 当只需要针对单一数据库创建副本时,可以通过附加目标名称实现精准控制: ```bash mysqlpump -u user_name -p database_name > specific_db_backup.sql ``` 这里替换掉占位符 `user_name` 和 `database_name` 来适配实际环境配置情况[^3]。 ##### 3. 排除部分组件不参与导出 有时可能希望忽略一些不必要的元素比如触发器或是存储过程,在这种情况下添加相应的开关即可达成目的: ```bash mysqlpump -u admin_user -p mydb --exclude-triggers --skip-routines > filtered_backup.sql ``` 上述例子展示了如何省略触发器以及跳过任何关联的过程定义从而精简最终产物的内容构成. --- #### 验证与恢复测试 为了确保备份的有效性,在生产环境中实施之前应当先做充分的小规模试验。确认无误后再推广至正式流程里去。另外记得定期安排演练计划以防万一发生意外状况也能迅速响应解决。 假设已经获得了一份名为 `backup_data.sql` 的转储文档,那么导入回原系统或其他兼容平台上的方法很简单只需调用标准客户端接口加载进去就可以了: ```bash mysql -u username -p target_database < backup_data.sql ``` 注意这里的 `<` 符号用于重定向外部资源流进入内部交互界面当中[^2]。 --- ### 注意事项 尽管 `mysqlpump` 提供了许多优势,但在使用过程中仍需留意几个要点: - 确认所使用MySQL 版本至少为 5.7 ,因为这是最低支持门槛[^4]。 - 对敏感信息采取适当保护措施防止泄露风险增加。 - 考虑网络带宽限制因素影响远程主机间的数据交换速度表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值