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

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

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

前言

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