如何使用gzip命令导出压缩MySQL数据库并导入至AWS RDS
MySQL gzip 压缩导出命令用法
以下为生产环境验证过的可直接执行的命令,按场景选择即可:
- 单库导出(默认适配后续RDS导入要求,不锁业务、兼容RDS权限限制)
mysqldump -u 源库用户名 -p -h 源库连接地址 --single-transaction --routines --triggers --events --set-gtid-purged=OFF 待导出的库名 | gzip -9 > 自定义备份名.sql.gz
参数说明:
--single-transaction:针对InnoDB引擎做一致性快照导出,全程不阻塞业务读请求--routines --triggers --events:同步导出存储过程、触发器、定时任务,不会遗漏库内自定义逻辑--set-gtid-purged=OFF:关闭GTID执行记录写入,避免导入RDS时因超管权限不足报错-9:gzip最高压缩比,若导出服务器CPU资源紧张,可调整为1-3的压缩等级,压缩速度更快
执行后命令行会提示输入数据库密码,禁止把明文密码直接拼接在-p参数后,会被记录在shell历史中存在安全风险。
- 全实例导出
mysqldump -u 源库用户名 -p -h 源库连接地址 --single-transaction --routines --triggers --events --set-gtid-purged=OFF --all-databases | gzip -9 > 全实例备份.sql.gz
注意:全实例备份导入RDS时必须排除系统库,不可直接导入。
压缩备份导入AWS RDS操作步骤
前置准备
- 优先选择和RDS同VPC、同可用区的EC2作为操作机,公网环境仅适合1G以下的小备份导入,避免传输中断、速度过慢
- 确认操作机安全组已放通到RDS实例3306端口的访问规则
- 提前在RDS上创建空目标库,字符集、排序规则和源库保持一致(常用配置为
utf8mb4/utf8mb4_general_ci) - 临时调整RDS参数组配置:将
max_allowed_packet设置为256M以上,wait_timeout设置为28800,避免大字段写入、长连接导入中断;10G以上的大库可临时升级RDS实例规格,导入完成后再降配,能大幅缩短导入耗时 - 确认使用的RDS数据库账号拥有目标库的全部读写、建表、修改权限
导入执行
无需提前解压压缩文件,直接通过管道导入,节省操作机磁盘空间:gunzip < 本地备份文件路径.sql.gz | mysql -h RDS实例端点地址 -u RDS用户名 -p 提前创建的目标库名
如果是全实例备份导入,命令末尾不需要指定库名,但必须先手动解压备份文件,删除
mysql、information_schema、performance_schema、sys四个系统库的所有导出语句,避免覆盖RDS内置系统配置导致实例故障。
大文件导入优化技巧
- 后台挂载进程避免终端断开:用nohup运行导入任务,日志输出到本地文件方便排查
nohup bash -c 'gunzip < 备份文件路径.sql.gz | mysql -h RDS端点 -u RDS用户名 -p 目标库名' > import_log.log 2>&1 & - 导入前临时关闭RDS自动备份、慢查询日志、通用查询日志,导入完成后再重新开启,可减少冗余IO消耗提升导入速度
常见报错处理
- 报GTID权限相关错误:说明导出时未加
--set-gtid-purged=OFF参数,可解压备份文件,删除所有SET @@GLOBAL.GTID_PURGED开头的语句后重新压缩导入 - 报主键/唯一键冲突:说明之前导入中断残留了部分数据,需要清空目标库所有表后重新导入
- 报连接超时断开:检查RDS安全组规则、
wait_timeout参数配置,确认操作机到RDS的网络无丢包
内容的提问来源于stack exchange,提问作者stalinrajindian
相关产品推荐
相关产品推荐

