AWS Database Migration Service
将本地或其他云的数据库迁移到 AWS 的服务,支持同构和异构引擎间的迁移及持续复制
概述
AWS Database Migration Service (DMS) 是一项全托管服务,用于将关系型数据库、NoSQL 数据库和数据仓库迁移到 AWS。可在源数据库运行的同时执行迁移,将停机时间降到最低。除了同构引擎间(如 Oracle to Oracle)的迁移外,结合 AWS Schema Conversion Tool (SCT) 还可实现异构引擎间(如 Oracle to Aurora PostgreSQL)的迁移。
全量加载 + CDC 实现零停机迁移的原理
DMS 的迁移可以三种模式执行。全量加载(Full Load)是将源表的全部数据一次性传输的模式,用于初始迁移。变更数据捕获(CDC: Change Data Capture)读取源数据库的事务日志,将迁移开始后的变更实时反映到目标。实务中最常用的是「全量加载 + CDC」的组合,先传输全部数据,再通过 CDC 追赶传输期间发生的变更,从而维持源和目标的同步。切换时只需将应用程序的连接目标切换到目标数据库,停机时间可控制在几分钟到几十分钟。CDC 根据数据库引擎使用不同的机制:Oracle 使用 LogMiner 或 Binary Reader,MySQL 使用 binlog,PostgreSQL 使用逻辑复制槽。需要在源数据库端预先进行 CDC 所需的设置(启用 binlog、归档日志保留期等),这是迁移计划初期阶段应确认的重要事项。
异构引擎迁移与 Schema Conversion Tool 实践
从 Oracle 到 Aurora PostgreSQL、从 SQL Server 到 Aurora MySQL 等异构引擎间的迁移中,架构转换是最大的挑战。AWS Schema Conversion Tool (SCT) 分析源数据库的架构,自动生成适配目标引擎的 DDL。无法自动转换的部分(存储过程的 PL/SQL 特有语法、Oracle 的 CONNECT BY 层次查询等)会作为操作项报告,需要手动改写。SCT 的评估报告直接关系到迁移工作量估算,建议在迁移项目最初期执行。数据库迁移相关书籍 (Amazon) 中系统地介绍了异构引擎迁移的架构转换模式。理解 DMS 负责数据迁移、SCT 负责架构转换的分工非常重要。Azure Database Migration Service 也提供类似的迁移功能,但 DMS 支持的源/目标组合更广泛,特别是从 Oracle 迁移的路径更为丰富。
复制实例的规格选择与迁移性能优化
DMS 在称为复制实例的基于 EC2 的中间服务器上执行数据转换和传输。实例大小的选择直接影响迁移性能,当表数量多或包含 LOB(Large Object)列时,需要选择内存和网络带宽充裕的实例。并行加载设置也很重要,增加表级并行度(MaxFullLoadSubTasks)可以缩短全量加载所需时间。但源数据库的负载也会成比例增加,因此从生产环境迁移时需要监控源端的 CPU 和 I/O 使用率进行调整。LOB 列的迁移模式有「完整 LOB 模式」和「受限 LOB 模式」,受限模式只迁移指定大小以下的 LOB,可以大幅提速。预先调查源数据库 LOB 列的最大大小并设置适当阈值是性能优化的关键。使用 DMS Serverless 则无需进行复制实例的规格选择,根据工作负载自动扩展,进一步简化迁移的规划和执行。