MySQL多线程备份工具mysqlpump详解!
MySQLPUMP备份工具详解
1. 概述
MySQLPump
是 MySQL 5.7 引入的一个客户端备份工具,用于替代传统的 mysqldump
工具。它提供了并行处理、进度状态显示、更好的压缩支持等新特性,能够更高效地执行 MySQL 数据库备份操作。
2. 主要特性
-
并行处理:可以并行备份多个数据库或表,提高备份速度
-
进度显示:提供备份进度信息
-
压缩支持:支持在备份时直接压缩输出
-
用户和权限备份:可选择备份用户账户和权限
-
更灵活的过滤选项:可以更精确地选择要备份的对象
-
性能优化:减少对服务器性能的影响
3. 安装与使用
MySQLpump 随 MySQL 5.7+ 一起安装,通常位于 MySQL 的 bin 目录下。
基本使用语法
mysqlpump [options] [db_name [tbl_name ...]]
4. 常用选项
连接选项
选项 | 描述 |
---|---|
--user=user_name 或 | MySQL 用户名 |
--password[=password] 或 | MySQL 密码 |
--host=host_name 或 | 连接的主机名 |
--port=port_num 或 | 连接的端口号 |
--socket=path 或 | 连接的 socket 文件 |
备份选项
选项 | 描述 |
---|---|
--default-parallelism=N | 默认并行度(默认2) |
--parallel-schemas=[N:]db_list | 指定哪些数据库并行备份 |
--single-transaction | 对支持事务的表使用事务隔离 |
--compress-output=algorithm | 使用指定算法压缩输出(LZ4或ZLIB) |
--defer-table-indexes | 延迟创建索引到数据加载后 |
--exclude-databases=db_list | 排除指定的数据库 |
--exclude-tables=table_list | 排除指定的表 |
--include-databases=db_list | 只包含指定的数据库 |
--include-tables=table_list | 只包含指定的表 |
--users | 备份用户账户 |
--skip-definer | 省略创建对象的 DEFINER 子句 |
--skip-dump-rows 或 | 不备份表数据,只备份结构 |
输出选项
选项 | 描述 |
---|---|
--result-file=file_name 或 | 输出到指定文件 |
--set-gtid-purged=value | 控制是否添加 SET @@GLOBAL.GTID_PURGED |
5. 使用示例
基本备份示例
备份整个 MySQL 实例:
mysqlpump -u root -p --all-databases > full_backup.sql
并行备份示例
并行备份多个数据库(默认并行度2):
mysqlpump -u root -p --parallel-schemas=4:db1,db2 --parallel-schemas=3:db3,db4,db5 > backup.sql
压缩备份示例
使用 LZ4 压缩备份:
mysqlpump -u root -p --compress-output=LZ4 --all-databases > backup.lz4
解压缩:
lz4_decompress backup.lz4 backup.sql
选择性备份示例
只备份特定数据库:
mysqlpump -u root -p --include-databases=db1,db2 > selected_dbs.sql
备份数据库结构但不备份数据:
mysqlpump -u root -p --skip-dump-rows db1 > db1_structure.sql
备份用户账户
mysqlpump -u root -p --users > users_backup.sql
6. 高级用法
使用并行处理优化大型数据库备份
对于大型数据库,可以调整并行度以提高备份速度:
mysqlpump -u root -p --default-parallelism=8 --parallel-schemas=4:large_db1,large_db2 > large_backup.sql
排除特定表
mysqlpump -u root -p db1 --exclude-tables=large_table1,large_table2 > db1_filtered.sql
延迟索引创建
减少恢复时间,先加载数据再创建索引:
mysqlpump -u root -p --defer-table-indexes db1 > db1_deferred_indexes.sql
7. 恢复备份
使用 mysql 客户端恢复备份:
mysql -u root -p < backup.sql
对于压缩备份,先解压再恢复:
lz4_decompress backup.lz4 backup.sql
mysql -u root -p < backup.sql
8. 性能考虑
-
并行度选择:根据服务器CPU核心数和负载情况选择适当的并行度
-
内存使用:并行备份会增加内存使用量
-
服务器负载:避免在生产高峰期执行大型备份
-
网络带宽:远程备份时考虑网络带宽限制
9. 与 mysqldump 的比较
特性 | mysqlpump | mysqldump |
---|---|---|
并行处理 | 支持 | 不支持 |
进度显示 | 支持 | 不支持 |
压缩输出 | 内置支持 | 需要外部工具 |
性能影响 | 通常较低 | 通常较高 |
成熟度 | 较新 | 非常成熟 |
灵活性 | 过滤选项更多 | 选项较少 |
10. 限制与注意事项
-
MySQLpump 需要 MySQL 5.7 或更高版本
-
并行备份可能导致锁等待问题
-
某些情况下可能不如 mysqldump 稳定
-
备份过程中如果中断,可能需要手动清理临时对象
-
不备份存储过程、函数、触发器的创建时间戳
11. 最佳实践
-
测试备份:定期验证备份的完整性和可恢复性
-
监控进度:大型备份时监控进度和资源使用情况
-
合理调度:安排在低峰期执行大型备份
-
安全存储:妥善保管备份文件,特别是包含敏感数据的备份
-
版本兼容性:注意 MySQL 版本间的兼容性问题
12. 故障排除
问题1:备份过程中出现锁等待超时
-
解决方案:增加锁等待超时时间
--lock-wait-timeout=seconds
问题2:内存不足
-
解决方案:减少并行度或分批备份
问题3:GTID 相关错误
-
解决方案:适当设置
--set-gtid-purged
选项
问题4:备份文件损坏
-
解决方案:检查磁盘空间,验证备份完整性
备份实战:
mysqlpump
备份脚本演示;
#!/bin/bash
# MySQLpump 备份脚本
# 基础配置
DB_HOST="192.168.0.1"
DB_PORT=3306
DB_USER="backup_user"
DB_PASS="xxxxxxxxxxx"
DATABASES="testdb"
BACKUP_DIR="/data/backup"
TS=$(date +%Y_%m_%d)
BACKUP_FILE="${BACKUP_DIR}/mysqlbak_${DATABASES}_${TS}.sql"
LOG_FILE="${BACKUP_DIR}/backup_${TS}.log"
PARALLEL_THREADS=4 # 设置并行线程数(根据CPU数,一般设置为CPU一半)# 记录开始时间
echo"[$(date +'%F %T')] 备份开始,使用 ${PARALLEL_THREADS} 个线程" | tee -a ${LOG_FILE}# 执行备份命令
mysqlpump -h${DB_HOST} -u${DB_USER} -p"${DB_PASS}" -P${DB_PORT} \--default-parallelism=${PARALLEL_THREADS} \--parallel-schemas=${PARALLEL_THREADS}:${DATABASES} \--single-transaction \--set-gtid-purged=off \--default-character-set=utf8mb4 \--compress-output=LZ4 \--defer-table-indexes \--skip-definer \--exclude-databases=mysql,sys,information_schema,performance_schema \--log-error=${LOG_FILE} \--result-file=${BACKUP_FILE} \2>> ${LOG_FILE}# 检查结果
if [ $? -eq 0 ] && [ -f ${BACKUP_FILE} ]; then# 获取压缩后的文件大小BACKUP_SIZE=$(du -sh ${BACKUP_FILE} | awk '{print $1}')echo"[$(date +'%F %T')] 备份成功,文件:${BACKUP_FILE} (大小: ${BACKUP_SIZE})" | tee -a ${LOG_FILE}# 可选:解压备份文件验证完整性# lz4_decompress ${BACKUP_FILE} ${BACKUP_FILE%.lz4}# echo "[$(date +'%F %T')] 备份已解压验证" | tee -a ${LOG_FILE}
elseecho"[$(date +'%F %T')] 备份失败!请检查日志:${LOG_FILE}" >&2exit 1
fi
脚本说明:
-
并行处理:
-
使用
--default-parallelism=4
设置默认并行度为4 -
使用
--parallel-schemas=4:testdb
对指定数据库使用4个线程并行备份
-
-
压缩功能:
-
添加
--compress-output=LZ4
直接输出LZ4压缩格式,减少备份文件大小
-
-
性能优化:
-
--defer-table-indexes
延迟创建索引,加快恢复速度 -
--skip-definer
省略DEFINER子句,避免权限问题
-
-
系统库排除:
-
自动排除系统库(mysql,sys等)减少不必要的备份内容
-
-
结果文件:
-
使用
--result-file
直接指定输出文件,而不是重定向
-
使用建议:
-
根据服务器CPU核心数调整
PARALLEL_THREADS
值,通常设置为CPU核心数的50-75% -
对于非常大的数据库,可以考虑分批备份不同表或使用更多并行线程
-
恢复备份时需要先解压:
lz4_decompress mysqlbak_testdb_2025_03_28.sql.lz4 mysqlbak_testdb_2025_03_28.sql mysql -h${DB_HOST} -u${DB_USER} -p"${DB_PASS}" < /data/backup/mysqlbak_testdb_2025_03_28.sql
相关文章:
MySQL多线程备份工具mysqlpump详解!
MySQLPUMP备份工具详解 1. 概述 MySQLPump 是 MySQL 5.7 引入的一个客户端备份工具,用于替代传统的 mysqldump 工具。它提供了并行处理、进度状态显示、更好的压缩支持等新特性,能够更高效地执行 MySQL 数据库备份操作。 2. 主要特性 并行处理&#x…...
创建信任所有证书的HttpClient:Java 实现 HTTPS 接口调用,等效于curl -k
在 Java 生态中,HttpClient 和 Feign 都是调用第三方接口的常用工具,但它们的定位、设计理念和使用场景有显著差异。以下是详细对比: DIFF1. 定位与抽象层级 特性HttpClientFeign层级底层 HTTP 客户端库(处理原始请求/响应&#…...
Redisson分布式集合原理及应用
Redisson是一个用于Redis的Java客户端,它简化了复杂的数据结构和分布式服务的使用。 适用场景对比 数据结构适用场景优点RList消息队列、任务队列、历史记录分布式共享、阻塞操作、分页查询RMap缓存、配置中心、键值关联数据支持键值对、分布式事务、TTLRSet去重集…...

深入理解 PlaNet(Deep Planning Network):基于python从零实现
引言:基于模型的强化学习与潜在动态 基于模型的强化学习(Model-based Reinforcement Learning)旨在通过学习环境动态的模型来提高样本效率。这个模型可以用来进行规划,让智能体在不需要与真实环境进行每一次决策交互的情况下&…...
精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论
精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论 在创业的黏性阶段,用户反馈是优化产品的重要依据,但如何避免被表面反馈误导?如何将反馈转化为可落地的迭代策略&#x…...

仿腾讯会议——视频发送接收
1、 添加音频模块 2、刷新图片,触发重绘 3、 等比例缩放视频帧 4、 新建视频对象 5、在中介者内定义发送视频帧的函数 6、完成发送视频的函数 7、 完成开启/关闭视频 8、绑定视频的信号槽函数 9、 完成开启/关闭视频 10、 完成发送视频 11、 完成刷新图片显示 12、完…...

从3.7V/5V到7.4V,FP6291在应急供电智能门锁中的应用
在智能家居蓬勃发展的当下,智能门锁以其便捷、安全的特性,成为现代家庭安防的重要组成部分。在智能门锁电量耗尽的情况下,应急电源外接移动电源(USB5V输入) FP6291升压到7.4V供电可应急开锁。增强用户在锁具的安全性、…...
java后端-海外登录(谷歌/FaceBook)
前言 由于最近公司的项目要在海外运行,因此需要对接海外的登录,目前就是谷歌和facebook两种,后面支付也是需要的,后续再进行书写 谷歌登录 这个相对比较容易,而且只提供给安卓即可,废话就不多说了,直接贴解决方案 引入maven依赖 <dependency> <groupId>com.go…...

【人工智障生成日记1】从零开始训练本地小语言模型
🎯 从零开始训练本地小语言模型:MiniGPT TinyStories(4090Ti) 🧭 项目背景 本项目旨在以学习为目的,从头构建一个完整的本地语言模型训练管线。目标是: ✅ 不依赖外部云计算✅ 完全本地运行…...

Selenium-Java版(frame切换/窗口切换)
frame切换/窗口切换 前言 切换到frame 原因 解决 切换回原来的主html 切换到新的窗口 问题 解决 回到原窗口 法一 法二 示例 前言 参考教程:Python Selenium Web自动化 2024版 - 自动化测试 爬虫_哔哩哔哩_bilibili 上期文章:Sel…...

一文深度解析:Pump 与 PumpSwap 的协议机制与技术差异
在 Solana 链上,Pump.fun 和其延伸产品 PumpSwap 构成了 meme coin 发行与流通的两大核心场景。从初期的游戏化发行模型,到后续的自动迁移与交易市场,Pump 系列协议正在推动 meme coin 从“爆发性投机”走向“协议化运营”。本文将从底层逻辑…...

星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态
星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态 2024年5月15日,成都双流蛟龙社区党群服务中心迎来了一场备受业界瞩目的发布会——优雅草科技旗下”星云智控v1.0.0”物联网AI智控系统正式发布。本次发布会吸引了包括沃尔沃集团、新希…...

SpringBoot(一)--- Maven基础
目录 前言 一、初始Maven 1.依赖管理 2.项目构建 3.统一项目结构 二、IDEA集成Maven 1.Maven安装 2.创建Maven项目 2.1全局设置 2.2 创建SpringBoot项目 2.3 常见问题 三、单元测试 1.JUnit入门 2.断言 前言 Maven 是一款用于管理和构建Java项目的工具ÿ…...

基于FPGA控制电容阵列与最小反射算法的差分探头优化设计
在现代高速数字系统测试中,差分探头的信号完整性直接影响测量精度。传统探头存在阻抗失配导致的信号反射问题,本文提出一种通过FPGA动态控制电容阵列,结合最小反射算法的优化方案,可实时调整探头等效容抗,将信号反射损…...

kakfa 基本了解
部署结构 Kafka 使用zookeeper来协商和同步,但是kafka 从版本3.5正式开始deprecate zookeeper, 同时推荐使用自带的 kraft. 而从4.0 开始则不再支持 zookeeper。 所以 kafka 是有control plane 和 data plane 的。 data plane 就是broker,control plane…...
基于Browser Use + Playwright 实现AI Agent操作Web UI自动化
Browser Use是什么 Browser Use是一个开源项目官网:Browser Use - Enable AI to control your browser,专为大语言模型(LLM)设计的只能浏览器工具,能够让AI像人类一样自然的浏览和操作网页,支持多标签页管…...

Origin绘制多因子柱状点线图
多因子柱状点线图是一种结合柱状图和点线图的复合图表,常用于同时展示多个因子(变量)在不同分组下的分布和趋势变化。 适用场景: (1)比较多个因子在不同分组中的数值大小(柱状图)&a…...

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线
在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…...
iOS 直播技术及优化
iOS直播技术的实现和优化涉及多个技术环节,需结合协议选择、编解码方案、播放器技术及性能调优等多方面。 一、核心技术实现 协议选择与传输优化 HLS(HTTP Live Streaming):苹果官方推荐,基于HTTP分片传输,…...

抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案
一、方案背景 随着网络通信发展,实时音视频需求激增。传统服务器中转方式延迟高、资源消耗大,WebP2P技术由此兴起。EasyRTC作为高性能实时通信平台,集成WebP2P技术,实现低延迟、高效率音视频通信,广泛应用于教育、医疗…...

俄罗斯军总参情报局APT28组织瞄准援乌后勤供应链发起全球网络攻击
2025年5月,由美国、英国、欧盟和北约网络安全与情报机构联合发布的最新网络安全公告披露,俄罗斯军总参情报局(GRU)第85特别服务中心第26165部队(又称APT28、Fancy Bear、Forest Blizzard和BlueDelta)正持续…...

杰发科技AC7801——PWM获取固定脉冲个数
测试通道6 在初始化时候打开通道中断 void PWM1_GenerateFrequency(void) {PWM_CombineChConfig combineChConfig[1]; //组合模式相关结构体PWM_IndependentChConfig independentChConfig[2];//独立模式相关结构体PWM_ModulationConfigType pwmConfig; //PWM模式相关结构体PWM…...

MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决
MacBook Pro 上 macOS 安装第三方应用报错解决方案 —— 彻底搞定「无法打开“XXX”,因为无法确定开发者身份」 适用系统:macOS Catalina 10.15 ~ macOS Sonoma 14.x 适用机型:Intel / Apple Silicon 全系 MacBook Pro 文章目录 **MacBook P…...
MVC和MVVM架构的区别
MVC和MVVM都是前端开发中常用的设计模式,都是为了解决前端开发中的复杂性而设计的,而MVVM模式则是一种基于MVC模式的新模式。 MVC(Model-View-Controller)的三个核心部分:模型、视图、控制器相较于MVVM(Model-View-ViewModel)的三个核心部分…...

RAG(Retrieval-Augmented-Generation)检索增强生成
什么是RAG(检索增强生成)? RAG是一种AI框架,结合传统的数据检索技术和LLM(大语言模型)的优势,通过将外部数据和LLM生成语言技能集合,对LLM的输出进行优化,使输出更准确、…...

黑马点评前端Nginx启动失败问题解决记录
Nginx启动失败问题解决记录 问题描述 在学习黑马Redis课程时,启动黑马点评Nginx前端项目发现: 无法访问8080端口检查Windows端口占用情况(无占用)结论:Nginx服务未成功启动 错误日志分析 在nginx安装目录下的logs…...

第12天-Python+Qt5开发实战:10大经典案例与深度解析
1. 基础窗口与信号槽机制 python 复制 下载 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("信号槽示例")btn = QPushButton("…...
软件开发命名避开保留关键字指南
在软件开发中,命名时避开保留关键字至关重要,否则可能导致语法错误、逻辑混乱或兼容性问题。以下是需要注意事项及具体建议: 1. 识别保留关键字 数据库系统:不同数据库的保留关键字不同,需查阅官方文档。 MySQL&#x…...
力扣第450场周赛
Q1. 数位和等于下标的最小下标 给你一个整数数组 nums 。 返回满足 nums[i] 的数位和(每一位数字相加求和)等于 i 的 最小 下标 i 。 如果不存在满足要求的下标,返回 -1 。 示例 1: 输入:nums [1,3,2] 输出࿱…...
React-改变当前页class默认的样式
比如antd for mobile,已经定义了默认的ui的class样式,如果想在当前页面的控件显示特殊的样式,除了指定style外,还可以强制改变默认class的样式,比如我想改变list.item的字体。 在返回渲染布局里面加上 return (<&…...