MySQLPump:利用并行参数高效备份数据库
前言
在MySQL数据库管理中,备份是保障数据安全与业务连续性的关键环节。随着数据量的不断增长,传统备份方式逐渐暴露出效率瓶颈。MySQL 5.7引入的mysqlpump工具,以其强大的多线程备份能力、丰富特性和灵活配置,为数据库备份工作带来了新的解决方案。
图片
核心特性
并行处理加速备份mysqlpump支持并行备份多个数据库或表,显著提升备份速度。通过调整并行度参数,如--default-parallelism和--parallel-schemas,可以根据服务器资源灵活分配任务,充分利用多核CPU的优势,将备份时间大幅缩短。
实时进度一目了然备份过程中,进度显示功能让管理员随时掌握备份状态,不再为漫长的备份过程感到焦虑。这一特性有助于及时发现潜在问题,比如备份停滞或速度过慢,从而及时调整策略。
压缩功能节省空间它内置对LZ4和ZLIB算法的支持,在备份时直接压缩输出,有效减少备份文件体积,节省存储空间。这不仅降低了存储成本,还加快了备份文件的传输速度,方便异地存储和灾备。
权限与用户备份能够选择性地备份用户账户和权限,确保在恢复数据时,用户的访问权限也能一并恢复,避免因权限丢失导致的访问问题,保障系统安全。
灵活过滤精准备份提供了丰富的过滤选项,如--exclude-databases、--exclude-tables、--include-databases和--include-tables,可以精准选择需要备份的对象,排除不必要的数据,提高备份效率。
使用指南
连接选项配置连接MySQL数据库时,常用选项包括--user(用户名)、--password(密码)、--host(主机名)、--port(端口号)和--socket(socket文件路径),确保与数据库建立正确连接。
备份选项设置并行度设置:--default-parallelism=N用于设置默认并行度,--parallel-schemas=[N:]db_list可针对特定数据库指定并行度。事务与索引处理:--single-transaction确保事务一致性,--defer-table-indexes则延迟索引创建,加快数据加载速度。数据筛选:利用--exclude-databases和--exclude-tables排除特定数据库和表,--include-databases和--include-tables选择备份特定对象。其他选项:--users备份用户账户,--skip-definer省略DEFINER子句,--skip-dump-rows只备份结构不备份数据。输出选项调整--result-file=file_name指定备份输出文件,--set-gtid-purged=value控制是否添加SET @@GLOBAL.GTID_PURGED语句,影响数据恢复时的GTID处理。
使用示例
部分库表结构备份假设业务中存在一些测试库,仅需备份其表结构用于后续开发环境搭建,可利用--include-databases和--skip-dump-rows选项。例如有test_dev1和test_dev2两个测试库:
其中old_data_table数据稳定无需备份
提高并行度可以显著加快备份速度
压缩备份
恢复备份
对于压缩备份,先解压再恢复
mysqlpump和mysqldump参数区别总汇:
功能
mysqldump
mysqlpump
说明
不导出表中的数据,只导出结构
-d, --no-data
-d, --skip-dump-rows
输出导入时的错误日志
--log-error=name
-log-error-file=name
导出用户和权限
无相关参数
--users
排除对象
无相关参数
--exclude-databases=name
--exclude-events=name
--exclude-routines=name
--exclude-tables=name
--exclude-triggers=name
--exclude-users=name
指定包含的对象
无相关参数
--include-databases=name
--include-events=name
--include-routines=name
--include-tables=name
--include-triggers=name
--include-users=name
导出指定表
--tables
--include-databases=name --include-tables=name
mysqldump:使用--tables参数跟库名表名,表名之间空格隔开。mysqlpump:导出表需要同时使用--include-tables和--include-databases参数,如果只指定--include-tables=bm那么就会导出所有库中bm表,表名之间逗号隔开。
insert插入包含多个值
--extended-insert
--extended-insert=#
mysqlpump:定义一个insert语句包含多少个值,默认一个insert包含250个值。
导出时在CREATE TABLE前DROP TABLE IF EXISTS
--add-drop-table
--add-drop-table