跨AWS账号迁移RDS实例数据如何实现应用无停机?
AWS RDS跨账号不停服迁移可行方案
以下方案均可以实现迁移过程源库正常对外提供服务,仅流量切换阶段有秒级甚至无感知中断,完全满足不停服要求:
方案1:使用AWS Database Migration Service(DMS)
这是AWS官方原生的迁移方案,兼容RDS支持的所有主流数据库引擎(MySQL、PostgreSQL、SQL Server等):
- 提前开启源RDS实例的自动备份,将日志保留时长设置为不低于预计的迁移周期,同时开启逻辑复制配置:MySQL需将binlog格式设为ROW,PostgreSQL需将
wal_level参数设为logical - 打通源AWS账号和目标AWS账号的网络(可以通过VPC对等连接、公网白名单等方式),确保目标账号的网络可以正常访问源RDS实例
- 在目标AWS账号下创建DMS实例,分别配置指向源RDS的源端点、指向目标账号RDS的目标端点
- 创建迁移任务,勾选全量迁移+后续增量数据同步选项,启动任务后等待全量迁移完成、增量数据追平源库
- 持续观察1-2小时确认两边数据完全一致、同步无延迟后,将Spring Boot应用的数据库连接配置切换到目标RDS,流量稳定后即可下线旧环境资源
方案2:数据库原生主从复制同步
适合熟悉对应数据库引擎底层逻辑的团队,无需额外支付DMS服务费用:
- 在源AWS账号下为源RDS创建一个临时只读副本,配置该副本的安全组规则,允许目标AWS账号的网络访问
- 目标账号下创建完RDS实例后,将其配置为上述临时只读副本的从库,开启数据库原生的主从同步
- 待同步无延迟、两边数据校验一致后,断开主从关系,将应用流量切到目标账号的RDS即可
方案3:逻辑备份+增量日志追平
适合数据量在100G以内的中小规模场景,可控性最高:
- 业务低峰期对源RDS执行无锁逻辑备份:MySQL使用
mysqldump --single-transaction命令,PostgreSQL使用pg_dump命令,记录备份完成时对应的日志位点(MySQL的binlog位点、PostgreSQL的LSN号) - 将备份文件导入到目标账号的RDS实例
- 拉取源RDS从备份位点之后的增量日志(binlog/WAL日志),逐笔重放到目标RDS实例,直到两边数据完全同步
- 校验数据一致后切换应用流量到目标RDS
迁移前置校验要求
- 提前在测试环境模拟完整迁移流程,验证数据一致性和切换过程的业务可用性
- 迁移全程开启源库和目标库的性能监控、错误日志监控,避免迁移任务占用过多资源影响线上业务
- 流量切换前必须做至少一次全量数据比对,确认两边数据无差异后再执行切换操作
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

