MySQL多线程备份工具mysqlpump详解!

news2025/5/23 10:05:06

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

 或 -u user_name

MySQL 用户名

--password[=password]

 或 -p[password]

MySQL 密码

--host=host_name

 或 -h host_name

连接的主机名

--port=port_num

 或 -P port_num

连接的端口号

--socket=path

 或 -S 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

 或 -d

不备份表数据,只备份结构

输出选项

选项

描述

--result-file=file_name

 或 -r 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. 性能考虑

  1. 并行度选择:根据服务器CPU核心数和负载情况选择适当的并行度

  2. 内存使用:并行备份会增加内存使用量

  3. 服务器负载:避免在生产高峰期执行大型备份

  4. 网络带宽:远程备份时考虑网络带宽限制

9. 与 mysqldump 的比较

特性

mysqlpump

mysqldump

并行处理

支持

不支持

进度显示

支持

不支持

压缩输出

内置支持

需要外部工具

性能影响

通常较低

通常较高

成熟度

较新

非常成熟

灵活性

过滤选项更多

选项较少

10. 限制与注意事项

  1. MySQLpump 需要 MySQL 5.7 或更高版本

  2. 并行备份可能导致锁等待问题

  3. 某些情况下可能不如 mysqldump 稳定

  4. 备份过程中如果中断,可能需要手动清理临时对象

  5. 不备份存储过程、函数、触发器的创建时间戳

11. 最佳实践

  1. 测试备份:定期验证备份的完整性和可恢复性

  2. 监控进度:大型备份时监控进度和资源使用情况

  3. 合理调度:安排在低峰期执行大型备份

  4. 安全存储:妥善保管备份文件,特别是包含敏感数据的备份

  5. 版本兼容性:注意 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}
else
    echo"[$(date +'%F %T')] 备份失败!请检查日志:${LOG_FILE}" >&2
    exit 1
fi

脚本说明:

  1. 并行处理

    • 使用 --default-parallelism=4 设置默认并行度为4

    • 使用 --parallel-schemas=4:testdb 对指定数据库使用4个线程并行备份

  2. 压缩功能

    • 添加 --compress-output=LZ4 直接输出LZ4压缩格式,减少备份文件大小

  3. 性能优化

    • --defer-table-indexes 延迟创建索引,加快恢复速度

    • --skip-definer 省略DEFINER子句,避免权限问题

  4. 系统库排除

    • 自动排除系统库(mysql,sys等)减少不必要的备份内容

  5. 结果文件

    • 使用 --result-file 直接指定输出文件,而不是重定向

使用建议:

  1. 根据服务器CPU核心数调整 PARALLEL_THREADS 值,通常设置为CPU核心数的50-75%

  2. 对于非常大的数据库,可以考虑分批备份不同表或使用更多并行线程

  3. 恢复备份时需要先解压:

    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2383808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解 PlaNet(Deep Planning Network):基于python从零实现

引言&#xff1a;基于模型的强化学习与潜在动态 基于模型的强化学习&#xff08;Model-based Reinforcement Learning&#xff09;旨在通过学习环境动态的模型来提高样本效率。这个模型可以用来进行规划&#xff0c;让智能体在不需要与真实环境进行每一次决策交互的情况下&…

仿腾讯会议——视频发送接收

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

从3.7V/5V到7.4V,FP6291在应急供电智能门锁中的应用

在智能家居蓬勃发展的当下&#xff0c;智能门锁以其便捷、安全的特性&#xff0c;成为现代家庭安防的重要组成部分。在智能门锁电量耗尽的情况下&#xff0c;应急电源外接移动电源&#xff08;USB5V输入&#xff09; FP6291升压到7.4V供电可应急开锁。增强用户在锁具的安全性、…

【人工智障生成日记1】从零开始训练本地小语言模型

&#x1f3af; 从零开始训练本地小语言模型&#xff1a;MiniGPT TinyStories&#xff08;4090Ti&#xff09; &#x1f9ed; 项目背景 本项目旨在以学习为目的&#xff0c;从头构建一个完整的本地语言模型训练管线。目标是&#xff1a; ✅ 不依赖外部云计算✅ 完全本地运行…

Selenium-Java版(frame切换/窗口切换)

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

一文深度解析:Pump 与 PumpSwap 的协议机制与技术差异

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

星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态

星云智控v1.0.0产品发布会圆满举行&#xff1a;以创新技术重构物联网监控新生态 2024年5月15日&#xff0c;成都双流蛟龙社区党群服务中心迎来了一场备受业界瞩目的发布会——优雅草科技旗下”星云智控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项目的工具&#xff…

基于FPGA控制电容阵列与最小反射算法的差分探头优化设计

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

kakfa 基本了解

部署结构 Kafka 使用zookeeper来协商和同步&#xff0c;但是kafka 从版本3.5正式开始deprecate zookeeper, 同时推荐使用自带的 kraft. 而从4.0 开始则不再支持 zookeeper。 所以 kafka 是有control plane 和 data plane 的。 data plane 就是broker&#xff0c;control plane…

Origin绘制多因子柱状点线图

多因子柱状点线图是一种结合柱状图和点线图的复合图表&#xff0c;常用于同时展示多个因子&#xff08;变量&#xff09;在不同分组下的分布和趋势变化。 适用场景&#xff1a; &#xff08;1&#xff09;比较多个因子在不同分组中的数值大小&#xff08;柱状图&#xff09;&a…

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中&#xff0c;Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级&#xff0c;Web漏洞扫描服务作为一种主动防御工具&#xff0c;逐渐成为企业安全体系的标配。本文将从特点与优势两方面&#xff0c;解析其价值与应用场景…

抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案

一、方案背景 随着网络通信发展&#xff0c;实时音视频需求激增。传统服务器中转方式延迟高、资源消耗大&#xff0c;WebP2P技术由此兴起。EasyRTC作为高性能实时通信平台&#xff0c;集成WebP2P技术&#xff0c;实现低延迟、高效率音视频通信&#xff0c;广泛应用于教育、医疗…

俄罗斯军总参情报局APT28组织瞄准援乌后勤供应链发起全球网络攻击

2025年5月&#xff0c;由美国、英国、欧盟和北约网络安全与情报机构联合发布的最新网络安全公告披露&#xff0c;俄罗斯军总参情报局&#xff08;GRU&#xff09;第85特别服务中心第26165部队&#xff08;又称APT28、Fancy Bear、Forest Blizzard和BlueDelta&#xff09;正持续…

杰发科技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”&#xff0c;因为无法确定开发者身份」 适用系统&#xff1a;macOS Catalina 10.15 ~ macOS Sonoma 14.x 适用机型&#xff1a;Intel / Apple Silicon 全系 MacBook Pro 文章目录 **MacBook P…

RAG(Retrieval-Augmented-Generation)检索增强生成

什么是RAG&#xff08;检索增强生成&#xff09;&#xff1f; RAG是一种AI框架&#xff0c;结合传统的数据检索技术和LLM&#xff08;大语言模型&#xff09;的优势&#xff0c;通过将外部数据和LLM生成语言技能集合&#xff0c;对LLM的输出进行优化&#xff0c;使输出更准确、…

黑马点评前端Nginx启动失败问题解决记录

Nginx启动失败问题解决记录 问题描述 在学习黑马Redis课程时&#xff0c;启动黑马点评Nginx前端项目发现&#xff1a; 无法访问8080端口检查Windows端口占用情况&#xff08;无占用&#xff09;结论&#xff1a;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("…

人工智能培训:解锁未来职场竞争力的核心路径与课程内容解析

当AI绘画工具在几秒内生成一幅媲美专业画师的作品&#xff0c;当AI程序员自主优化代码逻辑&#xff0c;当AI客服精准解答复杂问题——一个现实愈发清晰&#xff1a;人工智能正在重新定义“专业能力”的边界。 对于普通人而言&#xff0c;这场变革既带来焦虑&#xff0c;也孕育机…