适用场景华为云 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 7el8Enterprise Linux 8CentOS 8 / RHEL 8 / Rocky Linux 8 / AlmaLinux 8el9Enterprise Linux 9CentOS 9 / RHEL 9 / Rocky Linux 9 / AlmaLinux 9amd64/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.rpmUbuntu 22.04/24.04x86_64→ 选mydumper_1.0.3-1.bookworm_amd64.deb1.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.rpmUbuntu / 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中执行-- 创建用户请替换密码CREATEUSERbackup_user%IDENTIFIEDBYStrongPassw0rd!;-- 授予最小必要权限注意云 RDS 的 SUPER/BACKUP_ADMIN 权限不可用GRANTSELECT,RELOAD,LOCKTABLES,REPLICATIONCLIENT,PROCESS,SHOWVIEW,EVENT,TRIGGERON*.*TObackup_user%;FLUSHPRIVILEGES;重要说明REPLICATION CLIENT用于获取 Binlog 位置云 RDS 可能限制此权限建议加--source-data-1跳过RELOAD和LOCK TABLES在云 RDS 环境通常不可用通过--sync-thread-lock-modeSAFE_NO_LOCK规避EVENT权限在云 RDS 上无效无法访问mysql.event表需移除--events参数PROCESS用于查看当前连接和线程信息三、准备配置文件安全实践为避免在命令行中明文暴露账号密码创建统一的配置文件mydumper和myloader共用同一格式。3.1 华为云侧配置文件mydumper 导出用在华为云中转机上创建/data/mysqlBackup/backup.cnf[client] userbackup_user passwordStrongPassw0rd! host192.168.0.116 port3306设置安全权限仅当前用户可读写mkdir-p/data/mysqlBackupchmod600/data/mysqlBackup/backup.cnf说明[client]组中的配置会被mydumper自动读取无需重复添加[mydumper]组。3.2 阿里云侧配置文件myloader 导入用在阿里云中转机上创建/data/mysqlBackup/backup.cnf[client] user目标库账号 password目标库密码 host阿里云RDS地址 port3306设置安全权限仅当前用户可读写mkdir-p/data/mysqlBackupchmod600/data/mysqlBackup/backup.cnf说明mydumper和myloader的配置文件格式完全一致仅[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/sysecho 导出开始:$(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-modeSAFE_NO_LOCK\-c\-o/data/mysqlBackup/dump\21|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-modeSAFE_NO_LOCK\-c\-o/data/mysqlBackup/dump\21|tee-a/data/mysqlBackup/time.logecho 导出结束:$(date%Y-%m-%d %H:%M:%S)/data/mysqlBackup/time.log计时说明time命令会输出real总耗时、user用户态CPU时间、sys内核态CPU时间所有输出包括time的输出通过21 | 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-modeSAFE_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/21|tee-a/data/mysqlBackup/time.log# 生成 MD5 校验文件md5sum dump_*.tar.gzdump_$(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-essh -p 22\/data/mysqlBackup/dump_20260721_143022.tar.gz\root{阿里云中转机IP}:/data/mysqlBackup/21|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/21|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.gzmyloader支持直接读取.sql.gz无需解压每个文件。八、导入前准备阿里云 RDS-- 删除并重建目标库确保无表冲突DROPDATABASEIFEXISTShr-prd;CREATEDATABASEhr-prdCHARACTERSETutf8mb4COLLATEutf8mb4_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\21|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-eUSE \hr-prd\; SHOW TABLES;|wc-l# 对比关键表行数与源库对比mysql-h{阿里云RDS}-u{账号}-p-eUSE \hr-prd\; SELECT COUNT(*) FROM {关键表};# 检查存储过程/函数mysql-h{阿里云RDS}-u{账号}-p-eSHOW PROCEDURE STATUS WHERE Dbhr-prd;mysql-h{阿里云RDS}-u{账号}-p-eSHOW FUNCTION STATUS WHERE Dbhr-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-develUnknown option --no-locks旧版本改用--sync-thread-lock-modeSAFE_NO_LOCKCouldnt acquire LOCK INSTANCE FOR BACKUP云 RDS 无BACKUP_ADMIN添加--sync-thread-lock-modeSAFE_NO_LOCKError showing events on: mysql - ERROR 1044无mysql库权限去掉--events手动重建目录只有 2 个文件无.sql.gz正则匹配失败或库名错误检查正则和数据库名Unknown option --overwrite-tablesv1.0.3 不支持改用--overwrite-unsafeTable already exists目标库已有表导入前DROP DATABASE重建Shell 报!相关错误正则被解释用单引号包裹正则十二、性能参考基于 55GB 生产库实测步骤线程数耗时范围说明导出mydumper630~45 分钟取决于源库 I/O 和表复杂度打包tar.gz-5~10 分钟压缩率影响耗时传输千兆网络-10~15 分钟受跨云带宽影响导入myloader620~35 分钟受目标库 IOPS 影响总计-约 65~105 分钟建议预留 2 小时窗口实际耗时可能因环境而异建议提前在测试环境演练。文档名称mydumper_myloader_cloud_migration_guide.md版本v4.6实战验证版关键节点计时精简更新日期2026-07-21