• MySQLPump:利用并行参数高效备份数据库

MySQLPump:利用并行参数高效备份数据库

2025-06-12 07:37:03 栏目:宝塔面板 106 阅读

前言

在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两个测试库:

mysqlpump -u root -p --include-databases=test_dev1,test_dev2 --skip-dump-rows > test_dev_structure.sql

其中old_data_table数据稳定无需备份

mysqlpump -u root -p test_dev1 --exclude-tables=old_data_table > test_dev_structure.sql

提高并行度可以显著加快备份速度

mysqlpump -u root -p --default-parallelism=8 --parallel-schemas=4:test_dev1,test_dev2 > large_backup.sql

压缩备份

mysqlpump -u root -p test_dev1 --compress-output=LZ4  > backup.lz4

恢复备份

mysql -u root -p < test_dev_structure.sql

对于压缩备份,先解压再恢复

lz4_decompress backup.lz4 backup.sql
mysql -u root -p < backup.sql

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


备份脚本示例

#!/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

本文地址:https://www.yitenyun.com/282.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL Web 应用 异步数据库 数据同步 ACK 双主架构 循环复制 TIME_WAIT 运维 负载均衡 服务器 管理口 HexHub Docker JumpServer SSL 堡垒机 跳板机 HTTPS 服务器性能 JumpServer安装 堡垒机安装 Linux安装JumpServer SQL 查询 生命周期 Deepseek 宝塔面板 Linux宝塔 锁机制 esxi esxi6 root密码不对 无法登录 web无法登录 行业 趋势 序列 核心机制 Windows Windows server net3.5 .NET 安装出错 开源 PostgreSQL 存储引擎 HTTPS加密 宝塔面板打不开 宝塔面板无法访问 Windows宝塔 Mysql重置密码 机器学习 Redis 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 Undo Log 机制 Spring 动态查询 响应模型 Oracle 处理机制 InnoDB 数据库锁 优化 万能公式 连接控制 group by 索引 Serverless 无服务器 语言 监控 无法访问宝塔面板 异步化 ES 协同 技术 工具 openHalo scp Linux的scp怎么用 scp上传 scp下载 scp命令 Postgres OTel Iceberg 缓存方案 缓存架构 缓存穿透 国产数据库 高可用 分页查询 数据 主库 SVM Embedding Linux 安全 Netstat Linux 服务器 端口 存储 SQLite-Web SQLite 数据库管理工具 GreatSQL 连接数 加密 场景 云原生 R edis 线程 R2DBC 防火墙 黑客 启动故障 Recursive 共享锁 OB 单机版 向量数据库 大模型 SQLark 日志文件 MIXED 3 ​Redis 推荐模型 Canal AI 助手 RocketMQ 长轮询 配置 信息化 智能运维 自定义序列化 PG DBA 不宕机 Python 业务 传统数据库 向量化 向量库 Milvus Ftp IT运维 Web 接口 开发 同城 双活 聚簇 非聚簇 电商 系统 线上 库存 预扣 修改DNS Centos7如何修改DNS Hash 字段 分库 分表 filelock Rsync 架构 数据类型 磁盘架构 MySQL 9.3 MongoDB MCP 开放协议 缓存 redo log 重做日志 sftp 服务器 参数 PostGIS mini-redis INCR指令 数据结构 数据分类 • 索引 • 数据库 ZODB Doris SeaTunnel 语句 流量 频繁 Codis MVCC 分布式架构 分布式锁​ 窗口 函数 Go 数据库迁移 数据备份 虚拟服务器 虚拟机 内存 工具链 人工智能 推荐系统 EasyExcel MySQL8 失效 prometheus Alert 主从复制 代理 Redisson 锁芯 MGR 分布式集群 分页 聚簇索引 非聚簇索引 高效统计 今天这篇文章就跟大家 StarRocks 数据仓库 引擎 性能 千万级 大表 播客 网络架构 网络配置 数据集成工具 发件箱模式 网络故障 QPS 高并发 崖山 新版本 Entity 事务 Java INSERT COMPACT 容器 B+Tree ID 字段 核心架构 订阅机制 Web RDB AOF SSH Redka Weaviate 关系数据库 速度 服务器中毒 Caffeine CP 数据脱敏 加密算法 DBMS 管理系统 数据页 Redis 8.0 Valkey Valkey8.0 分布式 集中式 OAuth2 Token 微软 SQL Server AI功能 自动重启 容器化 LRU SpringAI 模型 读写 原子性 排行榜 排序 池化技术 连接池 数据字典 兼容性 JOIN 意向锁 记录锁 事务隔离 Testcloud 云端自动化 单点故障 dbt 数据转换工具 业务场景 UUID ID 部署 分页方案 排版 日志 1 优化器 Pottery InfluxDB 悲观锁 乐观锁 ReadView sqlmock 事务同步 网络 UUIDv7 主键 AIOPS RAG HelixDB 分布式锁 Zookeeper 字典 双引擎 对象 仪表盘 产业链 Pump Order 编程 单线程 Ansible 恢复数据 Crash 代码 线程安全 LLM IT 拦截器 动态代理 国产 用户 快照读 当前读 视图 订单 List 类型 慢SQL优化 count(*) count(主键) 行数 RR 互联网 表空间 解锁 调优 Next-Key 神经系统 矢量存储 数据库类型 AI代理 CAS 查询规划 多线程 GitHub Git 算法 技巧 并发控制 恢复机制 闪回