本文将介绍两种主流方法将AWS RDS MySQL数据库备份下载到S3,适用于生产环境需求。
方法一:通过RDS快照导出(AWS原生方案)
适用场景 :全量备份、大数据量、无需额外计算资源
流程:
-
创建数据库快照
-
进入AWS RDS控制台 → 选择目标MySQL实例 → 点击"操作" → "拍摄快照"
-
输入快照名称(如
my-db-snapshot-2024
)
-
-
配置S3导出任务
-
在RDS控制台左侧菜单选择快照 → 选择刚创建的快照
-
点击"操作" → "导出到S3"
-
配置参数:
-
导出格式 :选择
SQL
(完整数据库)或Parquet
(分析场景) -
S3存储桶 :输入目标桶名(如
my-backup-bucket
) -
IAM角色:选择有权写入S3的IAM角色(需提前配置)
-
加密:可选KMS加密
-
-
bash
# IAM角色权限示例(附加策略):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-backup-bucket/*"
}
]
}
-
执行导出
-
点击"导出"按钮,任务将在后台运行
-
在导出任务页面监控进度(导出速度约100GB/小时)
-
-
验证结果
-
导出完成后,在S3桶查看文件:
-
SQL格式:
s3://my-backup-bucket/export-snapshot-id/mydb.sql
-
Parquet格式:按表分目录存储
-
-
方法二:通过mysqldump+CLI(自定义导出)
适用场景 :部分表备份、小型数据库、需要预处理数据
流程:
-
准备EC2实例
-
启动Amazon Linux EC2(与RDS同VPC)
-
安装必要工具:
-
bash
# 安装MySQL客户端和AWS CLI
sudo yum install mysql -y
sudo yum install awscli -y
2.执行mysqldump导出
bash
# 连接RDS并导出SQL文件(替换实际参数)
mysqldump -h [RDS终端节点] -u [用户名] -p[密码] \
--single-transaction \
--routines \
[数据库名] > backup.sql
# 示例:
mysqldump -h mydb.123456.us-east-1.rds.amazonaws.com \
-u admin -pMyPass123 mydatabase > mydb_backup_$(date +%F).sql
3.上传到S3
bash
# 配置AWS CLI凭证(或使用IAM实例角色)
aws configure set aws_access_key_id AKIAxxx
aws configure set aws_secret_access_key xxxx
# 上传备份文件
aws s3 cp mydb_backup_2024-07-17.sql s3://my-backup-bucket/mysql-dumps/
关键注意事项
-
权限控制
-
RDS导出:IAM角色需包含
rds:ExportSnapshotToS3
权限 -
S3桶策略:允许目标桶接受RDS写入
-
{
"Effect": "Allow",
"Principal": { "Service": "export.rds.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-backup-bucket/*"
}
-
备份安全
-
启用S3版本控制防止误删
-
使用KMS加密备份文件(SSE-KMS)
-
-
成本优化
-
RDS快照导出:按导出数据量收费($0.03/GB)
-
定期清理旧备份:配置S3生命周期策略
-
方案对比
特性 | 快照导出方案 | mysqldump方案 |
---|---|---|
备份类型 | 全量 | 全量/部分表 |
数据量支持 | TB级 | 建议<100GB |
是否需要服务器 | 否 | 需要EC2 |
导出格式 | SQL/Parquet | 仅SQL |
是否影响数据库 | 无影响 | 可能产生读锁 |
执行速度 | 快(并行导出) | 慢(单线程) |