当前位置: 首页 > news >正文

mydumper 编译安装与 RPM 部署:从源码到实战的避坑指南

1. mydumper 工具简介与安装方式选择

mydumper 是一款开源的 MySQL 逻辑备份工具,相比传统的 mysqldump,它最大的优势在于支持多线程并行导出,能够显著提升大数据量场景下的备份效率。我在实际生产环境中使用 mydumper 已经有三年多时间,处理过 TB 级数据库的备份任务,实测速度比单线程备份快 5-10 倍不等。

安装 mydumper 主要有两种方式:源码编译安装和 RPM 包安装。源码编译的优势在于可以灵活选择版本,针对特定 MySQL 版本进行优化编译;而 RPM 包安装则简单快捷,适合快速部署场景。这里有个常见误区:很多人以为 RPM 包安装方式功能会有缺失,其实两种安装方式得到的 mydumper 功能完全一致,区别主要在于依赖管理和后续升级维护的便利性。

选择建议:

  • 需要最新功能或特定版本补丁 → 选择源码编译
  • 生产环境标准化部署 → 选择 RPM 包
  • MySQL 8.0 及以上版本 → 优先选择 0.11.5 以上版本
  • 老旧系统环境 → 可能需要降级到 0.10.x 版本

2. 源码编译安装全流程详解

2.1 环境准备与依赖安装

在 RHEL/CentOS 7.6 系统上,我推荐使用以下依赖包组合。这个组合经过多次实测,能完美兼容 MySQL 8.0:

yum install -y gcc-c++ make cmake pcre-devel glib2-devel zlib-devel openssl-devel

这里有个容易踩的坑:openssl-devel 的版本问题。如果系统自带的 OpenSSL 版本过低(比如 1.0.2),编译时会报错。我建议先检查版本:

openssl version

如果版本低于 1.1.1,可以考虑从源码编译安装新版 OpenSSL,或者使用 MySQL 自带的 SSL 库(后文会具体说明)。

2.2 源码获取与编译技巧

从 GitHub 获取最新源码:

wget https://github.com/mydumper/mydumper/archive/refs/tags/v0.11.6.tar.gz tar zxvf v0.11.6.tar.gz cd mydumper-0.11.6

编译时建议新建 build 目录,这是 CMake 项目的标准做法:

mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mydumper \ -DMYSQL_LIBRARIES=/usr/local/mysql/lib \ -DMYSQL_INCLUDE_DIR=/usr/local/mysql/include

关键参数说明:

  • CMAKE_INSTALL_PREFIX:指定安装路径
  • MYSQL_LIBRARIES:指向 MySQL 的 lib 目录
  • MYSQL_INCLUDE_DIR:指向 MySQL 的 include 目录

如果遇到 CMake 报错找不到编译器,通常是缺少 gcc-c++ 包。我之前在阿里云的 ECS 上就遇到过这个问题,安装后即可解决:

yum install -y gcc-c++

2.3 常见编译问题排查

问题1:MySQL 库文件找不到

错误信息示例:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. MYSQL_LIBRARIES_dl MYSQL_LIBRARIES_m

解决方案:

export PATH=/usr/local/mysql/bin:$PATH cmake .. -DMYSQL_CONFIG=/usr/local/mysql/bin/mysql_config

问题2:OpenSSL 不兼容

如果报错 OpenSSL 版本问题,可以改用 MySQL 自带的 SSL 库:

cmake .. -DWITH_SSL=/usr/local/mysql/lib/private

问题3:glib2 缺失

报错信息:

-- checking for one of the modules 'glib-2.0' -- package 'glib-2.0' not found

需要安装开发包:

yum install -y glib2-devel

2.4 安装与验证

编译成功后执行安装:

make && make install

验证安装是否成功:

/usr/local/mydumper/bin/mydumper --version

如果出现库文件缺失错误,可以通过 ldd 命令检查:

ldd /usr/local/mydumper/bin/mydumper

常见的库文件缺失问题可以通过建立软链接解决。比如 MySQL 8.0 的库文件路径特殊,可以这样处理:

ln -s /usr/local/mysql/lib/libmysqlclient.so.21 /lib64/ ln -s /usr/local/mysql/lib/private/libssl.so.1.1 /lib64/ ln -s /usr/local/mysql/lib/private/libcrypto.so.1.1 /lib64/

3. RPM 包安装与版本兼容性

3.1 RPM 安装步骤

从 GitHub 下载对应版本的 RPM 包:

wget https://github.com/mydumper/mydumper/releases/download/v0.11.5/mydumper-0.11.5-1.el7.x86_64.rpm rpm -ivh mydumper-0.11.5-1.el7.x86_64.rpm

安装后验证:

mydumper --version

3.2 版本兼容性问题

MySQL 8.0 用户需要注意:部分老版本 mydumper RPM 包是基于 MySQL 5.7 编译的,使用时可能出现兼容性问题。我遇到过最典型的问题是:

Error connecting to database: Authentication plugin 'caching_sha2_password' cannot be loaded

这是因为 MySQL 8.0 默认使用了新的认证插件。解决方案有两种:

  1. 修改 MySQL 用户认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  1. 使用支持 MySQL 8.0 的 mydumper 版本(0.11.5+)

3.3 RPM 与源码安装对比

特性源码编译安装RPM 包安装
安装复杂度
定制化程度
版本选择灵活性任意版本依赖官方发布
依赖管理手动解决自动解决
升级维护需要重新编译yum 直接升级
适合场景开发/特殊需求生产环境标准化部署

4. 不同 MySQL 版本的适配方案

4.1 MySQL 5.7 适配要点

对于 MySQL 5.7,推荐使用 mydumper 0.10.7 以上版本。安装时需要注意:

  1. 确保安装正确的开发包:
yum install -y mysql-community-devel
  1. 如果使用 RPM 安装,确认包是基于 MySQL 5.7 编译的:
rpm -qip mydumper-0.10.7-1.el7.x86_64.rpm | grep "Build Date"

4.2 MySQL 8.0 适配要点

MySQL 8.0 用户建议:

  1. 使用 mydumper 0.11.5 以上版本
  2. 编译时添加额外参数:
cmake .. -DWITH_ZSTD=ON -DWITH_BINLOG=ON
  1. 特别注意认证插件问题(前文已提及)

4.3 特殊场景处理

场景1:MariaDB 环境

MariaDB 10.5+ 用户需要打补丁编译:

wget https://github.com/mydumper/mydumper/pull/XXX.patch patch -p1 < XXX.patch

场景2:低内存环境

添加编译参数减少内存占用:

cmake .. -DCMAKE_BUILD_TYPE=MinSizeRel

5. 生产环境部署建议

5.1 性能调优参数

在 /etc/mydumper.cnf 中配置:

[default] threads = 16 chunk-filesize = 64 compress-protocol = true

关键参数说明:

  • threads:根据 CPU 核心数设置,建议不超过 vCPU 数的 2 倍
  • chunk-filesize:每个 chunk 文件大小(MB),影响并行度
  • compress-protocol:启用压缩协议,节省网络带宽

5.2 备份策略设计

推荐组合方案:

  1. 全量备份:每周一次,使用 mydumper
  2. 增量备份:每天一次,使用 binlog
  3. 验证备份:定期执行 myloader 恢复测试

备份脚本示例:

#!/bin/bash DATE=$(date +%Y%m%d) mydumper -u backup -p password -h 127.0.0.1 -P 3306 \ -o /backup/full_$DATE \ --trx-consistency-only \ --compress \ --threads 16 \ --chunk-filesize 64

5.3 常见故障处理

问题1:备份过程中连接断开

解决方案:

  • 添加 --long-query-retries 参数
  • 调整 --long-query-retry-interval
  • 检查 MySQL 的 wait_timeout 设置

问题2:大表备份超时

对大表特别处理:

mydumper ... --regex '^(?!(mysql\.slow_log|sys\.statement_analysis))'

问题3:备份文件损坏

验证备份完整性:

myloader --dry-run -d /backup/full_20230101

在多年的使用经验中,我发现 mydumper 的稳定性与 MySQL 版本高度相关。建议在测试环境充分验证后再应用到生产环境,特别是大版本升级时。对于超大规模数据库(10TB+),可以考虑分库分表备份策略,避免单个备份任务运行时间过长。

http://www.jsqmd.com/news/928262/

相关文章:

  • 中国建设银行广东茂名分行:警惕AI诈骗的陷阱
  • 跨国链路的物理限制:马蒂斯公式(Mathis‘s Formula)
  • 人形检测数据集, 目标检测/行人检测/安防AI模型训练 密集场景人形检测数据集 / 行人检测数据集训练及应用
  • Protobuf协议解析与微信数据结构设计
  • 开发日志六
  • 对波普尔可证伪主义引发全域系统性灾难的全面批判
  • 百度SEO优化实战指南:2026年百度SEO优化核心技巧全面解析
  • STM32 SAI 通讯原理与 TDM 应用
  • 第四章:暗礁
  • 【个人记账理财助手】手动新增账单功能
  • 2026年最新三亚市金银首饰回收+金条金币+铂金K金 高价回收;实体老店回收黄金 多年口碑 交易放心;TOP5实力权威排行榜推荐+联系方式 - 亦辰小黄鸭
  • 2026最新指南|Codex 接入 MiniMax 模型全攻略:利用 CC Switch 本地路由零基础配置
  • 从一次线上GC故障排查说起:我为什么最终把生产环境从OracleJDK 11换成了Amazon Corretto 11
  • 医疗营销实战:生成式AI在聊天机器人、内容创作与社交媒体中的应用
  • 第1篇 | 政治思维生存逻辑解析
  • 二分查找模板(binary_search)
  • Web应用技术第一次和第二次作业
  • 无人机红外数据集 深度学习框架 无人机高空红外检测系统pyqt5界面 无人机高空红外数据集 无人机高空红外行人车辆检测数据集
  • 【多Agent 协作深度解析】Claude 官方 5 种协调模式的原理、选择与工程实践
  • 微服务架构(MSA)是如何诞生的?
  • 聊天机器人的搭建(一)
  • AI销售助理:1700万美元融资背后的技术架构与落地实践
  • AI内容运营成为大学生就业热门方向,越来越多年轻人开始学习AI营销
  • 单向循环链表超详细精讲 | 带头节点带头指针 + 完整可运行c语言代码
  • 车载AI Agent Harness:行车安全与交互管控
  • 生成式AI赋能无障碍开发:从设计到测试的实践指南
  • 波普尔主义百年灾难清单:系统性尸检报告
  • GPT-Image-2迭代亮点解析
  • 保姆级教程:在Ubuntu 20.04上从源码编译运行ORB-SLAM3(含ROS1/ROS2配置)
  • 设计模式深度解析:从六大原则到Spring源码,面试通关全攻略