数据库迁移服务 - 通过 AWS DMS 实现安全高效的数据库迁移
解说利用 AWS Database Migration Service (DMS) 进行数据库迁移的方法。介绍通过与 RDS 集成实现同构和异构数据库间的迁移,以及通过持续复制最小化停机时间的实践方法。
数据库迁移的挑战与 DMS 概述
数据库迁移是云迁移项目中风险最高的环节之一。需要考虑的因素包括数据完整性的确保、停机时间的最小化、Schema 转换、应用程序兼容性验证等。AWS Database Migration Service (DMS) 是一项全托管服务,可安全地将数据从本地数据库迁移到 AWS,或在 AWS 内的数据库之间迁移。支持 Oracle、SQL Server、MySQL、PostgreSQL、MongoDB、Amazon Aurora、DynamoDB 等 20 多种数据库引擎作为源或目标。DMS 除了 AWS 数据库服务(RDS、Aurora、DynamoDB、Redshift)外,还可指定 EC2 上的自管理数据库作为目标,在迁移目标的灵活性方面具有优势。
迁移任务的设置与端点管理
DMS 的迁移任务由源端点、目标端点和复制实例三个组件构成。源端点定义迁移源的数据库连接信息,目标端点定义迁移目标的连接信息。复制实例是执行从源读取数据、必要时进行转换并写入目标的计算资源。以下 CLI 命令可创建复制实例。 ```bash aws dms create-replication-instance \ --replication-instance-identifier my-repl-instance \ --replication-instance-class dms.r5.large \ --allocated-storage 100 \ --multi-az ``` 通过表映射规则可选择性指定迁移对象的 Schema 或表,还可定义表名和列名的转换规则。使用过滤规则可仅迁移符合特定条件的记录。迁移前的预评估功能可自动检查源数据库的兼容性,预先识别迁移时可能出现问题的数据类型和对象。还提供 DMS Serverless 选项,根据迁移工作负载自动扩展容量,无需事先进行容量规划。
持续复制与停机时间最小化
DMS 的持续复制(CDC: Change Data Capture)功能在初次全量加载完成后,继续将源数据库的变更实时反映到目标。这样在迁移期间可保持源数据库运行,同时维持与目标数据库的同步。切换时的停机时间仅限于切换应用程序连接的几分钟,即使是大规模数据库的迁移也能将对业务的影响降到最低。CDC 读取源数据库的事务日志(Oracle 的 Redo Log、MySQL 的 Binary Log、PostgreSQL 的 WAL),按顺序将 INSERT、UPDATE、DELETE 的变更应用到目标。通过多可用区配置的复制实例,还可确保迁移过程本身的高可用性。通过 CloudWatch 指标监控复制延迟(Replication Lag),可准确判断切换时机。
异构数据库迁移与 Schema Conversion Tool
异构数据库间的迁移(例如从 Oracle 到 Aurora PostgreSQL)需要转换 Schema、存储过程、触发器、视图等数据库对象。AWS Schema Conversion Tool (SCT) 分析源数据库的 Schema,自动转换为与目标数据库兼容的格式。对于无法转换的对象,会详细报告需要手动转换的位置和推荐的转换方法。SCT 的评估报告定量评估迁移的复杂度,提供自动转换率、需要手动转换的对象数量和估计工时。一般工作负载中 80% 以上的 Schema 可自动转换。SCT 在单一工具中统一支持从 Oracle、SQL Server、SAP ASE、Teradata 等多种源的转换。结合 DMS 和 SCT,可在一致的工作流中执行 Schema 转换和数据迁移。 如果想系统学习 DMS 复制,也可参考相关书籍(Amazon)。
迁移后的数据验证与优化
DMS 的数据验证功能自动确认源和目标的数据完全一致,保证迁移的准确性。除了按表的行数比较外,还可执行列级数据比较,检测到不一致时生成详细报告。迁移后的数据库优化中,利用 RDS Performance Insights 分析查询性能,考虑添加索引或重写查询。迁移到 Aurora 时,可利用添加只读副本实现读取扩展、Aurora Serverless v2 根据工作负载自动扩展。以下命令可确认迁移任务的表统计信息。 ```bash aws dms describe-table-statistics \ --replication-task-arn arn:aws:dms:ap-northeast-1:123456789012:task:TASK123 \ --filters Name=table-name,Values=orders ``` 通过设置 CloudWatch Alarms 监控复制延迟和错误数,在超过阈值时发送 SNS 通知,构建运维体制可提高迁移过程的可靠性。
DMS 的费用
DMS 按复制实例的小时计费。dms.r5.large 每小时约 0.185 美元(月费约 133 美元)。DMS Serverless 按 DCU(DMS Capacity Unit)按量计费,每 DCU 小时约 0.018 美元。Schema Conversion Tool (SCT) 免费。初始加载完成后执行持续复制(CDC)时,复制实例需常时运行,因此迁移完成后应及时停止实例。
总结 - 数据库迁移策略的构建指南
AWS DMS 是安全高效地执行同构和异构数据库间迁移的全托管服务。SCT 实现 80% 以上的 Schema 自动转换、预评估的兼容性检查、数据验证功能保证迁移精度,是数据库迁移项目成功不可或缺的功能。DMS Serverless 选项无需事先容量规划,通过根据迁移工作负载的自动扩展提高成本效率。