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

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

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

前言

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