mysqldump适用于小库,xtrabackup用于大库物理恢复;前者导出sql可跨版本,后者需同版本且必须经qpress解压、--prepare一致性处理、清理rds特有参数后才能成功恢复。

直接用 mysqldump 导出再导入,适用于小库(
物理备份恢复:先确认 RDS 实例是否支持下载
RDS 高可用系列、高性能本地盘、MySQL 5.5/5.6/5.7/8.0 才允许下载物理备份。云盘实例不提供物理备份下载,只能用逻辑备份或快照备份(后者需走 RDS 快照恢复流程)。在控制台「备份恢复 > 数据备份列表」里,若某备份右侧无「下载」按钮,说明该备份是云盘快照或实例不满足条件。另外,TDE 加密表必须先解密,否则 xtrabackup 恢复会报错 Failed to decrypt tablespace。
解压物理备份前必须装 qpress 和 xtrabackup
阿里云 RDS 物理备份多为 .tar 或 .xb.gz 格式,其中含大量 .qp 压缩块,普通 tar -zxvf 无法解压。必须:
- 下载并安装
qpress(如qpress-11-linux-x64.tar),解压后复制到/usr/bin/qpress并加执行权限 - 安装与 RDS MySQL 版本匹配的
percona-xtrabackup:MySQL 5.7 对应percona-xtrabackup-24,8.0 对应percona-xtrabackup-80 - 验证命令可用:
xtrabackup --version和qpress -h不报错才算到位
恢复过程关键三步不能跳
物理恢复不是简单拷贝文件,漏掉任一环都会导致启动失败或数据损坏:
-
xtrabackup --prepare(即旧版innobackupex --apply-log)必须执行,否则 InnoDB redo log 未回放,启动时会卡在InnoDB: Starting crash recovery并最终失败 -
backup-my.cnf中的innodb_fast_checksum、innodb_log_block_size等 RDS 特有参数必须注释或删除,否则本地 MySQL 启动报错unknown variable - 目标目录(如
/var/lib/mysql)必须为空且属主为mysql:mysql;若复用已有实例目录,务必先停服务、清空、chown,否则xtrabackup --copy-back会拒绝覆盖
逻辑备份更简单但有隐性限制
用 mysqldump 从 RDS 导出再导入本地,表面看只需两条命令,实际容易栽在几个地方:
- RDS 默认关闭
SELECT ... INTO OUTFILE,所以不能用该方式导出;必须走客户端连接导出 -
mysqldump命令要加--set-gtid-purged=OFF(8.0+)或--skip-set-charset(避免字符集冲突),否则导入时可能报错GTID_PURGED can only be set when GTID_EXECUTED is empty - 导入前确保本地 MySQL 的
max_allowed_packet≥ 导出文件最大单行长度,否则中途断在ERROR 2006 (HY000) - 大 SQL 文件别用
source命令,用mysql -u -p db_name 更稳
物理恢复最易卡在 backup-my.cnf 参数清理和 --prepare 步骤,这两个动作没有日志提示成功与否,但缺一不可;逻辑恢复看似简单,却常因 GTID、字符集、包大小等配置细节静默失败。动手前务必确认 RDS 备份类型和本地 MySQL 小版本号(如 5.7.32 和 5.7.40 表结构兼容性可能有差异)。











