news 2026/7/22 3:48:32

mydumper/myloader 云数据库迁移完整操作手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mydumper/myloader 云数据库迁移完整操作手册

适用场景:华为云 RDS for MySQL → 阿里云 RDS for MySQL 数据迁移
数据规模:55GB 生产库
核心优势:多线程并行,速度是mysqldump的 5~10 倍
文档版本:v4.6(实战验证版,关键节点计时精简版)
更新日期:2026-07-21

一、版本选择与安装

1.1 如何选择正确的安装包

mydumper的 GitHub Release 提供多种打包格式,选择依据如下:

文件名后缀含义适用系统
el7Enterprise Linux 7CentOS 7 / RHEL 7 / Rocky Linux 7
el8Enterprise Linux 8CentOS 8 / RHEL 8 / Rocky Linux 8 / AlmaLinux 8
el9Enterprise Linux 9CentOS 9 / RHEL 9 / Rocky Linux 9 / AlmaLinux 9
amd64/x86_64x86_64 架构绝大多数 Intel/AMD 服务器
arm64/aarch64ARM 架构华为云鲲鹏、阿里云倚天等 ARM 实例

选择原则

  • 先确定中转服务器的操作系统版本(cat /etc/os-release)和 CPU 架构(uname -m
  • 选择对应的组合包,例如:CentOS 7 + x86_64 → 选mydumper-1.0.3-1.el7.x86_64.rpm
  • Ubuntu 22.04/24.04(x86_64)→ 选mydumper_1.0.3-1.bookworm_amd64.deb

1.2 安装步骤

CentOS / RHEL / Rocky Linux
# 以 CentOS 7 x86_64 为例wgethttps://github.com/mydumper/mydumper/releases/download/v1.0.3-1/mydumper-1.0.3-1.el7.x86_64.rpm# 安装 pcre2 依赖(必须,否则会报错)sudoyuminstall-ypcre2-devel# 安装 mydumpersudorpm-ivhmydumper-1.0.3-1.el7.x86_64.rpm# 若仍有其他依赖问题,可启用 EPEL 仓库后重试sudoyuminstall-yepel-releasesudoyuminstall-ymydumper-1.0.3-1.el7.x86_64.rpm
Ubuntu / Debian
# 以 Ubuntu 22.04 x86_64 为例wgethttps://github.com/mydumper/mydumper/releases/download/v1.0.3-1/mydumper_1.0.3-1.bookworm_amd64.debsudoaptinstall./mydumper_1.0.3-1.bookworm_amd64.deb

验证安装:

mydumper--version# 应显示 v1.0.3myloader--version

二、创建备份用户(云 RDS 环境)

云数据库(华为云/阿里云 RDS)的账户权限通常受限,需提前创建一个专用备份用户并授予必要权限。

在源库(华为云 RDS)中执行:

-- 创建用户(请替换密码)CREATEUSER'backup_user'@'%'IDENTIFIEDBY'StrongPassw0rd!';-- 授予最小必要权限(注意:云 RDS 的 SUPER/BACKUP_ADMIN 权限不可用)GRANTSELECT,RELOAD,LOCKTABLES,REPLICATIONCLIENT,PROCESS,SHOWVIEW,EVENT,TRIGGERON*.*TO'backup_user'@'%';FLUSHPRIVILEGES;

重要说明

  • REPLICATION CLIENT用于获取 Binlog 位置(云 RDS 可能限制此权限,建议加--source-data=-1跳过)
  • RELOADLOCK TABLES在云 RDS 环境通常不可用,通过--sync-thread-lock-mode=SAFE_NO_LOCK规避
  • EVENT权限在云 RDS 上无效(无法访问mysql.event表),需移除--events参数
  • PROCESS用于查看当前连接和线程信息

三、准备配置文件(安全实践)

为避免在命令行中明文暴露账号密码,创建统一的配置文件,mydumpermyloader共用同一格式。

3.1 华为云侧配置文件(mydumper 导出用)

在华为云中转机上创建/data/mysqlBackup/backup.cnf

[client] user=backup_user password=StrongPassw0rd! host=192.168.0.116 port=3306

设置安全权限(仅当前用户可读写):

mkdir-p/data/mysqlBackupchmod600/data/mysqlBackup/backup.cnf

说明[client]组中的配置会被mydumper自动读取,无需重复添加[mydumper]组。

3.2 阿里云侧配置文件(myloader 导入用)

在阿里云中转机上创建/data/mysqlBackup/backup.cnf

[client] user=目标库账号 password=目标库密码 host=阿里云RDS地址 port=3306

设置安全权限(仅当前用户可读写):

mkdir-p/data/mysqlBackupchmod600/data/mysqlBackup/backup.cnf

说明mydumpermyloader的配置文件格式完全一致,仅[client]中的连接信息不同(分别指向源库和目标库)。

四、导出数据(在华为云侧中转机执行)

4.1 线程数(-t)如何选择?

CPU 核数推荐线程数说明
2 核-t 4保守配置
4 核-t 6~8推荐配置(实战验证)
8 核-t 12~16高性能配置
  • 云 RDS 受限于磁盘 I/O,线程数过大可能增加竞争,建议从-t 4开始测试,逐步增加
  • 实战验证:4 核中转机使用-t 6表现稳定

4.2 导出命令与计时

方式一:全库导出(不排除任何表)

场景:导出hr-prd数据库的所有表

正则写法'^hr-prd\.'匹配hr-prd库下的所有表。

# 创建备份目录mkdir-p/data/mysqlBackup/dump# 执行全库导出并计时(time 输出 real/user/sys)echo"=== 导出开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.logtimemydumper\--defaults-extra-file=/data/mysqlBackup/backup.cnf\-t6\--regex'^hr-prd\.'\--triggers\--routines\--source-data=-1\--sync-thread-lock-mode=SAFE_NO_LOCK\-c\-o/data/mysqlBackup/dump\2>&1|tee-a/data/mysqlBackup/time.logecho"=== 导出结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log
方式二:排除部分表后导出(按需过滤)

场景:导出hr-prd数据库,但排除特定日志表、所有_copy表(白名单除外)。

正则写法'^hr-prd\.(?!aut_audit_log|aut_authication_log|hr_log|opr_operation_log|sys_log|(?!(org_enterprise_copy|org_employee_copy_ent)).*_copy).*'

echo"=== 导出开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.logtimemydumper\--defaults-extra-file=/data/mysqlBackup/backup.cnf\-t6\--regex'^hr-prd\.(?!aut_audit_log|aut_authication_log|hr_log|opr_operation_log|sys_log|(?!(org_enterprise_copy|org_employee_copy_ent)).*_copy).*'\--triggers\--routines\--source-data=-1\--sync-thread-lock-mode=SAFE_NO_LOCK\-c\-o/data/mysqlBackup/dump\2>&1|tee-a/data/mysqlBackup/time.logecho"=== 导出结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log

计时说明

  • time命令会输出real(总耗时)、user(用户态CPU时间)、sys(内核态CPU时间)
  • 所有输出(包括time的输出)通过2>&1 | tee -a追加到time.log,便于汇总各阶段耗时

4.3 正则表达式场景速查

需求正则写法
全库导出(所有表)--regex '^hr-prd\.'
只备份特定表(如 orders, users, products)--regex '^hr-prd\.(orders|users|products)$'
排除特定表(如 log_table, temp_data)--regex '^hr-prd\.(?!log_table|temp_data).*'
排除特定表 + 排除所有含_copy的表(白名单保留)--regex '^hr-prd\.(?!aut_audit_log|...|(?!(org_enterprise_copy|org_employee_copy_ent)).*_copy).*'

使用单引号包裹正则表达式,避免!|被 Shell 解释。

4.4 ⚠️ 关于--events的重要说明

参数是否可用原因
--triggers✅ 可用information_schema获取
--routines✅ 可用information_schema获取
--events❌ 不可用需访问mysql.event表,普通用户无权限

替代方案:迁移后手动重建事件(查询源库SHOW CREATE EVENT后在目标库执行)。

4.5 ⚠️ 关于锁参数

在云 RDS 环境,推荐使用--sync-thread-lock-mode=SAFE_NO_LOCK来避免全局锁,同时通过 Binlog 位置校验一致性,这是最安全的方式。

若版本不支持SAFE_NO_LOCK,可改用NO_LOCK,但需确保已停止写入。

4.6 Shell 转义提醒

始终用单引号包裹正则表达式,例如:--regex '^hr-prd\.(?!log).*',避免!被 bash 解释。

五、打包压缩与文件校验(华为云侧)

# 进入备份父目录cd/data/mysqlBackup# 记录打包开始时间echo"=== 打包开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log# 执行打包并计时timetar-czvfdump_$(date+%Y%m%d_%H%M%S).tar.gz dump/2>&1|tee-a/data/mysqlBackup/time.log# 生成 MD5 校验文件md5sum dump_*.tar.gz>dump_$(date+%Y%m%d).tar.gz.md5# 记录打包结束时间echo"=== 打包结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log

六、跨云传输(华为云 → 阿里云)

根据网络条件选择传输方式,并在传输前后记录时间。

方式一:rsync(支持断点续传,推荐)

# 记录传输开始时间echo"=== 传输开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log# 执行传输并计时timersync-avzP--progress-e"ssh -p 22"\/data/mysqlBackup/dump_20260721_143022.tar.gz\root@{阿里云中转机IP}:/data/mysqlBackup/2>&1|tee-a/data/mysqlBackup/time.log# 记录传输结束时间echo"=== 传输结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log

方式二:scp(简单直接)

echo"=== 传输开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.logtimescp/data/mysqlBackup/dump_20260721_143022.tar.gz root@{阿里云中转机IP}:/data/mysqlBackup/2>&1|tee-a/data/mysqlBackup/time.logecho"=== 传输结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log

方式三:对象存储中转(跨云网络不稳时)

可使用 OSS/OBS 中转,计时方式类似(上传 + 下载两步)。

七、解压与校验(阿里云侧中转机)

# 进入目标目录mkdir-p/data/mysqlBackupcd/data/mysqlBackup# 校验 MD5(与源端对比)md5sum dump_20260721_143022.tar.gz# 解压(时间计入导入准备,可选记录)timetar-xzvfdump_20260721_143022.tar.gz

myloader支持直接读取.sql.gz,无需解压每个文件。

八、导入前准备(阿里云 RDS)

-- 删除并重建目标库(确保无表冲突)DROPDATABASEIFEXISTS`hr-prd`;CREATEDATABASE`hr-prd`CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;

九、导入数据(在阿里云侧中转机执行)

# 记录导入开始时间echo"=== 导入开始:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log# 执行导入并计时timemyloader\--defaults-extra-file=/data/mysqlBackup/backup.cnf\-t6\-d/data/mysqlBackup/dump\--overwrite-unsafe\--enable-binlog\2>&1|tee-a/data/mysqlBackup/time.log# 记录导入结束时间echo"=== 导入结束:$(date'+%Y-%m-%d %H:%M:%S')===">>/data/mysqlBackup/time.log

参数说明

  • --overwrite-unsafe:覆盖已有表(v1.0.3 兼容)
  • --enable-binlog:确保 Binlog 写入,保证主备同步(1主2备架构必须)
  • 导入后的 WARNING(如SET SESSION SQL_LOG_BIN权限不足)可安全忽略,因为云 RDS 无 SUPER 权限反而保证了 Binlog 正常写入。

十、数据验证与清理

10.1 数据验证

# 检查表数量mysql-h{阿里云RDS}-u{账号}-p-e"USE \`hr-prd\`; SHOW TABLES;"|wc-l# 对比关键表行数(与源库对比)mysql-h{阿里云RDS}-u{账号}-p-e"USE \`hr-prd\`; SELECT COUNT(*) FROM {关键表};"# 检查存储过程/函数mysql-h{阿里云RDS}-u{账号}-p-e"SHOW PROCEDURE STATUS WHERE Db='hr-prd';"mysql-h{阿里云RDS}-u{账号}-p-e"SHOW FUNCTION STATUS WHERE Db='hr-prd';"

10.2 查看各阶段耗时

cat/data/mysqlBackup/time.log

日志中记录了:

  • 导出开始/结束时间
  • time mydumper的输出(real, user, sys)
  • 打包开始/结束时间及time tar输出
  • 传输开始/结束时间及time rsync/scp输出
  • 导入开始/结束时间及time myloader输出

10.3 清理临时文件

# 华为云中转机rm-rf/data/mysqlBackup/dump /data/mysqlBackup/dump_*.tar.gz /data/mysqlBackup/backup.cnf /data/mysqlBackup/time.log# 阿里云中转机(确认导入成功后)rm-rf/data/mysqlBackup/dump /data/mysqlBackup/dump_*.tar.gz /data/mysqlBackup/backup.cnf /data/mysqlBackup/time.log

十一、常见问题处理

问题现象可能原因解决方案
安装时报pcre2 is needed缺少依赖sudo yum install -y pcre2-devel
Unknown option --no-locks旧版本改用--sync-thread-lock-mode=SAFE_NO_LOCK
Couldn't acquire LOCK INSTANCE FOR BACKUP云 RDS 无BACKUP_ADMIN添加--sync-thread-lock-mode=SAFE_NO_LOCK
Error showing events on: mysql - ERROR 1044mysql库权限去掉--events,手动重建
目录只有 2 个文件,无.sql.gz正则匹配失败或库名错误检查正则和数据库名
Unknown option --overwrite-tablesv1.0.3 不支持改用--overwrite-unsafe
Table already exists目标库已有表导入前DROP DATABASE重建
Shell 报!相关错误正则被解释用单引号包裹正则

十二、性能参考(基于 55GB 生产库实测)

步骤线程数耗时范围说明
导出(mydumper)630~45 分钟取决于源库 I/O 和表复杂度
打包(tar.gz)-5~10 分钟压缩率影响耗时
传输(千兆网络)-10~15 分钟受跨云带宽影响
导入(myloader)620~35 分钟受目标库 IOPS 影响
总计-约 65~105 分钟建议预留 2 小时窗口

实际耗时可能因环境而异,建议提前在测试环境演练。

文档名称mydumper_myloader_cloud_migration_guide.md
版本:v4.6(实战验证版,关键节点计时精简)
更新日期:2026-07-21

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 3:45:47

Codex双开方案:突破API额度限制的工程实践

1. Codex额度限制的痛点与双开方案的价值作为一名长期使用Codex进行AI辅助开发的工程师,我深刻理解额度限制带来的困扰。OpenAI官方文档明确指出,Codex最适合处理"范畴明确的任务,例如你或队友大约一小时可完成的工作,或实作…

作者头像 李华
网站建设 2026/7/22 3:44:08

2025云计算趋势与袋鼠云核心技术架构解析

1. 项目背景与行业洞察2025年对于云计算行业而言将是一个关键节点。作为国内领先的数据智能服务商,袋鼠云近期发布的战略规划揭示了他们对未来三年技术演进的深度思考。这份被业界称为"2025答案"的蓝图,实际上是对下一代云计算架构的前瞻性布局…

作者头像 李华
网站建设 2026/7/22 3:42:16

ZFX山海证券:从用户体验路径切入的细节拆解

对新手与注重稳健体验的外汇内容读者而言,“能看懂”往往比“堆概念”更重要。围绕ZFX山海证券,以下重点写清解释是否通俗、规则是否易查、提示是否前置,以及服务是否具备连续性。在外汇相关服务中,读者最在意的通常是信息是否清楚…

作者头像 李华
网站建设 2026/7/22 3:40:19

后AGI时代:分布式集体智能架构与实现

1. 项目概述:后AGI时代的集体智能演进"后AGI架构:增强的集体智能"这个标题指向了一个正在形成的前沿技术领域。AGI(通用人工智能)代表着能够像人类一样广泛思考和学习的AI系统,而后AGI则意味着我们已经跨越了…

作者头像 李华
网站建设 2026/7/22 3:38:50

开源游戏模拟器技术解析:从Ryujinx到PS1模拟

1. 开源模拟器的黄金时代:重温经典游戏的新选择在数字娱乐领域,模拟器技术已经发展到了一个令人惊叹的水平。Ryujinx作为一款用C#编写的任天堂Switch模拟器,代表了当前开源模拟器开发的最前沿。这个项目不仅通过了4050多个严格测试&#xff0…

作者头像 李华
网站建设 2026/7/22 3:36:57

RAG技术解析:检索增强生成原理与实践指南

1. RAG技术概述:从理论到实践的关键跨越检索增强生成(Retrieval-Augmented Generation,简称RAG)正在重塑我们与大型语言模型交互的方式。想象一下,当你向ChatGPT提问2023年最新的税法变更时,传统LLM可能会给…

作者头像 李华