AWS RDS (MySQL)蓝绿部署常见误区
本文档主要说明:
- RDS 蓝绿部署的正确用法
- 常见误解(在绿库执行 DDL/DML)
- 推荐的数据库变更流程
AWS RDS (MySQL)蓝绿部署使用指南
📅 最后更新:2025年10月13日
🎯 目标:帮助团队正确理解 RDS 蓝绿部署的适用场景,避免常见误区
一、什么是 RDS 蓝绿部署?
AWS RDS 的 蓝绿部署(Blue/Green Deployment) 是一种用于 数据库升级 的高可用机制,旨在实现:
- ✅ 零停机版本升级(如 MySQL 5.7 → 8.0)
- ✅ 参数组、实例规格、存储类型的变更
- ✅ 一键切换与快速回滚
- ✅ 最小化对生产流量的影响
架构示意图
蓝色实例(Blue) —— 生产环境(可读写)↓
逻辑复制(只允许从蓝 → 绿)↓
绿色实例(Green) —— 影子副本(只读)
🔁 切换(Cutover)后,绿色成为新的生产,蓝色可保留用于回滚。
二、蓝绿部署的正确用途 ✅
变更类型 | 是否支持 | 说明 |
---|---|---|
升级 MySQL 版本 | ✅ | 如 5.7 → 8.0 |
修改参数组 | ✅ | 如 max_connections , innodb_buffer_pool_size |
更改实例规格 | ✅ | 如 db.t3.medium → db.r6g.large |
存储类型变更 | ✅ | 如 gp2 → gp3 |
备份保留期调整 | ✅ | 仅影响未来备份 |
执行DDL | ✅ | Create 表级别内容,蓝库会同步到绿库,但是绿库无法同步到蓝库 |
执行DML | ❌ | 执行DML 会触发绿库中断同步 |
✅ 所有这些变更都会在 绿色实例 上预演,验证无误后通过 一键切换 生效。
三、常见错误思想与风险 ❌
❌ 错误认知:
“绿色实例是一个可以自由测试的‘预发环境’,我可以往里面加索引、建表、插数据。”
✅ 实际后果:
-
绿色实例执行以下操作:
CREATE INDEX ... ALTER TABLE ... UPDATE ...
不会中断数据,绿库中会更新,但是蓝库中无法更新。
❌ 实际后果:
-
在绿库中执行DML :
INSERT UPDATE DELETE
均会导致蓝库同步绿库失败。
3. AWS 的保护机制
- 当检测到绿色实例有写操作,自动停止复制
SHOW REPLICA STATUS
中Replica_SQL_Running: No
- 无法自动恢复,必须删除并重建蓝绿部署
五、正确的数据库变更流程 ✅
蓝绿部署 ≠ 数据库变更测试平台。
你应该使用以下 分层策略 来安全发布数据库变更。
蓝绿部署的定位
- 仅用于 非数据变更类升级
- 不用于 DDL/DML 测试
- 切换前确保绿色实例 未被手动修改
六、最佳实践总结
项目 | 推荐做法 |
---|---|
🔐 权限控制 | 绿色实例账号仅授予 SELECT 权限 |
📊 监控 | 检查 Replica_SQL_Running 状态 |
🛑 禁止操作 | 不在绿色实例执行任何 INSERT/UPDATE/ALTER |
🔄 切换策略 | 切换后观察 10 分钟,确认写入正常 |
🧯 回滚预案 | 保留蓝色实例 24-48 小时用于回滚 |
七、附录:常见问题
Q:我误在绿库写了数据,怎么办?
A:复制已中断,无法恢复。必须删除当前蓝绿部署,重新创建一个新的。
Q:如何验证绿库是否同步正常?
A:连接绿色实例,执行:
SHOW REPLICA STATUS\G -- 检查 Replica_SQL_Running: Yes
Q:我想测试新索引的性能,怎么办?
A:在 预发环境 创建索引并压测,不要在蓝绿部署中测试。
八、结语
RDS 蓝绿部署是一个强大的工具,但它的设计目标是 安全升级基础设施配置,而不是替代数据库变更管理流程。
✅ 正确使用它,可以实现零停机升级
❌ 误用它(如在绿库写数据),会导致部署失败
请结合 Flyway/Liquibase + 预发环境 + 蓝绿部署,构建完整的数据库发布体系。