深色模式
云数据库 RDS
摘要:托管数据库(RDS)帮你接管了安装、打补丁、主从搭建,但备份保留多久、能不能恢复、恢复要多久仍需你负责。本文给出备份配置、恢复演练、跨可用区高可用和慢查询定位的完整操作路径。
适用环境
bash
# 一台能连到数据库的跳板机
which mysql psql mysqldump pg_dump
mysql --version || psql --version
# 网络连通性检查
nc -vz -w 3 <RDS内网地址> 33061
2
3
4
5
2
3
4
5
操作步骤
一、开通时的关键选项
- 网络:放私有子网,安全组只允许应用安全组访问端口。
- 多可用区(Multi-AZ):生产必开,主库故障时自动切到备库。
- 存储类型:优先 SSD;注意存储有 IOPS 上限,低于自建 NVMe。
- 参数组:字符集、连接数、超时等在这里改,不要改完主库配置就以为永久生效。
bash
# 查看实例是否多可用区、备份保留期
aws rds describe-db-instances \
--query 'DBInstances[].[DBInstanceIdentifier,MultiAZ,BackupRetentionPeriod,Engine,DBInstanceClass]' \
--output table1
2
3
4
2
3
4
二、配置自动备份与 binlog
bash
# 修改备份保留期为 7 天(0 表示关闭自动备份!)
aws rds modify-db-instance --db-instance-identifier prod-mysql \
--backup-retention-period 7 \
--preferred-backup-window "03:00-04:00" \
--preferred-maintenance-window "mon:04:00-mon:05:00" \
--apply-immediately1
2
3
4
5
6
2
3
4
5
6
危险
--backup-retention-period 0 会直接关闭自动备份并删除已有自动快照。除非你明确知道自己有异地备份,否则永远不要设为 0。
保留期决定了「时间点恢复(PITR)」能回溯多久。生产建议 7–35 天,关键库再加长期快照。
三、手动打快照(重大变更前必做)
bash
aws rds create-db-snapshot --db-instance-identifier prod-mysql \
--db-snapshot-identifier prod-mysql-before-migration-20261009
# 等待完成
aws rds wait db-snapshot-completed --db-snapshot-identifier prod-mysql-before-migration-20261009
aws rds describe-db-snapshots --db-snapshot-identifier prod-mysql-before-migration-20261009 \
--query 'DBSnapshots[].[Status,PercentProgress,SnapshotCreateTime]'1
2
3
4
5
6
7
2
3
4
5
6
7
四、恢复演练(真正重要的一步)
没演练过的备份等于没有备份。做法:把快照恢复到一台新实例,验证后再删除。
bash
# 从快照恢复到新实例
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier prod-mysql-restore-test \
--db-snapshot-identifier prod-mysql-before-migration-20261009 \
--db-subnet-group-name private-subnet-group
# 时间点恢复:恢复到今天 14:30
aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier prod-mysql \
--target-db-instance-identifier prod-mysql-pitr-test \
--restore-time 2026-10-09T14:30:00Z1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
恢复完成后校验数据:
bash
mysql -h <新实例地址> -u app -p -e "SHOW DATABASES; SELECT COUNT(*) FROM app.orders;"
# 与生产对比行数、最新订单时间1
2
2
注意
恢复出的实例默认是新的连接地址,应用里的连接串要改。演练完记得删除实例,否则会持续计费。
五、慢查询定位
bash
# MySQL:确认慢日志已开启
mysql -e "SHOW VARIABLES LIKE 'slow_query_log%'; SHOW VARIABLES LIKE 'long_query_time';"
# 直接在库里看当前长事务
mysql -e "SELECT id,user,host,db,command,time,state,left(info,80) FROM information_schema.processlist WHERE time>5 ORDER BY time DESC LIMIT 10;"
# PostgreSQL
psql -c "SELECT pid,now()-query_start AS dur,state,left(query,80) FROM pg_stat_activity WHERE state<>'idle' ORDER BY dur DESC LIMIT 10;"1
2
3
4
5
6
7
2
3
4
5
6
7
六、监控指标要看哪几个
CPU 利用率、连接数、可用存储、读写 IOPS、复制延迟(只读库)、慢查询数。给「可用存储」和「连接数」设告警,这两个最容易突然打满。
验证
- [ ]
describe-db-instances显示MultiAZ=true、BackupRetentionPeriod >= 7 - [ ] 最近一次恢复演练有记录(时间、耗时、恢复到的时间点、数据校验结果)
- [ ] 慢查询日志已开启并能查到内容
- [ ] 只读库复制延迟监控已配置
常见坑
- 开了备份但从没恢复过:真正需要恢复时才发现快照过期、参数不对、磁盘不够。
- 备份窗口与业务高峰重叠:备份会短暂影响 IO,应放在业务低峰。
- 只读库当高可用用:只读库有复制延迟,主库挂了不能简单切过去当主库,多可用区才是高可用方案。
- 连接数打满:应用没用连接池或连接泄漏,表现为「偶发连不上」,重启应用只是掩盖问题。
- 公网地址开在生产库:既慢又不安全,内网地址足够,走跳板机连接。