跳至主要内容

AWS DMS 教程:数据库迁移分步指南

本教程将带您完成使用 AWS DMS 迁移数据库到 AWS 的设置与使用,并介绍如何优化性能与排查问题。
· 15分钟 阅读

使用 AI 探索

随着组织通过云技术推进基础设施现代化,将数据库迁移到 AWS 至关重要。AWS 提供了强大的迁移工具 AWS Database Migration Service(DMS),可实现从本地数据库、自管云数据库以及其他 AWS 服务进行低风险、近乎即时的迁移。

在本教程中,您将了解如何设置并使用 AWS DMS 来满足数据库迁移需求。您将学习:

  • AWS DMS 的工作原理及其关键功能。
  • 设置并执行迁移的分步流程。
  • 优化性能、安全性与成本的最佳实践。
  • 排查常见迁移问题的技巧。

让我们开始吧!

什么是 AWS DMS?

AWS Database Migration Service(DMS)让您能够轻松将数据库迁移到 AWS,且无需停机。它支持同构与异构迁移,例如从 MySQL 到 MySQL,或从 Oracle 到 PostgreSQL,是组织上云的重要工具。

通过 AWS DMS,您可以:

  • 使用变更数据捕获(CDC)持续迁移数据,几乎不影响生产环境。
  • 让 AWS DMS 自动化并管理迁移任务,无需具备深厚的数据库专业知识。
  • 将数据复制到 Amazon RDS、Aurora、Redshift、DynamoDB、S3 等服务。

AWS DMS 广泛用于:

  • 将本地数据库“平移”迁移至 AWS。
  • 跨区域数据库复制以实现灾难恢复。
  • 通过将多个数据库迁移到数据仓库来实现数据整合。

AWS DMS 的功能

AWS DMS 提供多项关键功能以支持数据库迁移:

1. 同构与异构迁移

  • 同构迁移:在同类型数据库之间迁移(如 MySQL 到 MySQL)。
  • 异构迁移:在不同引擎之间转换架构与数据(如 Oracle 到 PostgreSQL)。

2. 通过变更数据捕获(CDC)实现最小停机

  • 变更数据捕获(CDC)实时监控源数据库中的变更,并将这些变更传递至目标数据库,从而降低系统停机时间。
  • 适用于需要不间断数据访问的关键业务应用。

3. 全托管且可扩展

  • AWS DMS 负责创建与管理资源、跟踪性能并处理故障切换。
  • 支持多可用区(Multi-AZ),提高可用性。

4. 广泛的数据库兼容性

  • 源数据库:Oracle、SQL Server、MySQL、PostgreSQL、MongoDB、Amazon Aurora 等。
  • 目标数据库:Amazon RDS、Aurora、Redshift、DynamoDB、S3、OpenSearch。

5. 借助 AWS SCT 进行架构转换

  • AWS Schema Conversion Tool(SCT)可在进行异构迁移时协助转换数据库架构。
  • 自动转换存储过程、视图和触发器以适配目标数据库。

6. 持续监控与日志记录

  • 与 AWS CloudWatch 集成,便于您监控迁移进度并识别瓶颈。
  • 记录详细的迁移统计信息,包括错误率、延迟与复制滞后。

7. 安全与合规

  • 支持 TLS 加密以保障数据传输安全。
  • 与 AWS IAM 集成,实现精细化访问控制。
  • 符合包括 HIPAA、PCI DSS、SOC 在内的主要安全标准。

设置 AWS DMS

让我们动手实践,从设置 AWS DMS 开始。本教程将带您将 Oracle 数据库迁移到 Amazon Aurora(MySQL),包括架构转换、数据复制,以及确保平滑迁移的最佳实践。

步骤 1:使用 AWS DMS 的先决条件

在迁移数据库之前,您需要设置必要的 AWS 资源。使用 AWS CloudFormation,您可以自动化资源部署,从而专注于迁移任务。我们将使用的模板会部署:

  • 用于网络的 AWS VPC(含公有子网)。
  • 用于执行数据迁移的 AWS DMS 复制实例。
  • 作为目标数据库的 Amazon RDS 实例。
  • 用于存放迁移工具(如 AWS Schema Conversion Tool(SCT))或源数据库模拟的 Amazon EC2 实例。

登录 AWS 控制台

  1. 使用您的凭证登录AWS 管理控制台。
  2. 点击屏幕右上角的下拉菜单并选择您的区域。本教程中我将选择N. Virginia 区域。

打开区域选择下拉框的 AWS 管理控制台,显示多个可用区域

图 1 在 AWS 管理控制台中选择区域。

  1. 进入EC2 控制台,导航到密钥对(Key Pair)部分。确保与上一步处于相同区域。
  2. 点击创建密钥对(Create Key Pair),命名为“DMS”。

AWS EC2 界面显示密钥对创建页面,包含 RSA 和 ED25519 选项                                        

图 2 在 AWS EC2 中创建用于安全访问的密钥对。

  1. 点击创建(Create),浏览器将下载 DMS.pem。
  2. 请妥善保存此文件——后续步骤将用到。

配置环境

在此步骤中,您将使用 CloudFormation(CFN)模板来搭建数据库迁移所需的 AWS 基础设施。这将自动化部署,让您专注于迁移任务。

  1. 打开 AWS CloudFormation 控制台,点击 Create Stack。
  2. 选择 Choose an existing template,然后选择 Upload a template file。

AWS CloudFormation 界面,展示通过上传模板文件创建栈的选项

图 3 上传 CloudFormation 模板以创建新栈。

  1. 从 Github Gist 下载文件并点击 Choose file。
  2. 上传 DMS.yaml 文件并点击 Next。
  3. 按要求填写参数,然后点击 Next。

CloudFormation 栈设置页面,显示数据库迁移参数、EC2 配置和网络设置

图 4 配置 AWS DMS CloudFormation 栈的参数

注意:您可根据需求调整实例类型,或保持默认设置。

  1. 在 Stack Options 页面保持默认设置并点击 Next。
  2. 检查配置并点击 Create stack。
  3. 系统将跳转回 CloudFormation 控制台,状态显示为“CREATE_IN_PROGRESS”。等待其变为“CREATE_COMPLETE”。

CloudFormation 资源列表显示逻辑和物理 ID,状态为

图 5 在 AWS CloudFormation 中查看资源创建状态

  1. 完成后,进入 Outputs 选项卡并记录其中的值——后续步骤将用到。

为迁移准备源与目标数据库

我们先从源数据库配置开始。按照以下步骤,使用远程桌面协议(RDP)访问 EC2 实例。

步骤 1:设置 RDP 访问
  • Mac 用户:从 App Store 下载 Microsoft Remote Desktop。
  • PC 用户:使用 远程桌面连接您设置的电脑。
步骤 2:修改安全组规则以允许 RDP
  • 打开 AWS EC2 控制台。
  • 在左侧菜单中点击安全组(可能需要下拉)。
  • 勾选选择以“InstanceSecurityGroup”结尾的安全组。
  • 点击操作 > 编辑入站规则。
  • 找到 RDP 规则(端口 3389),点击来源并选择我的 IP,以提高安全性。
    • 如果位于公司 VPN 或复杂网络环境,您可能需要稍后将其改为“任意位置(0.0.0.0/0)”。

AWS 安全组配置页面,显示用于数据库和 RDP 访问的入站规则

图 6 在 AWS 中编辑入站安全规则。

  • 点击保存规则。
步骤 3:获取 RDP 凭证
  • 在 AWS EC2 控制台,点击左侧菜单中的实例。
  • 选择名为“<StackName>-EC2Instance”的实例。
  • 点击操作 > 连接。
  • 切换到RDP 客户端选项卡并点击获取密码。
  • 点击浏览并上传之前下载的密钥对文件。
  • 点击解密密码。

AWS EC2 界面显示用于上传私钥以解密管理员密码的字段

图 7 获取 AWS EC2 实例的 Windows 密码。

  • 复制生成的密码并保存,后续会用到。
步骤 4:连接到 EC2 实例
  • 点击下载远程桌面文件以保存 RDP 文件。
  • 打开 RDP 客户端(Mac 上为 Microsoft Remote Desktop)。
  • 使用已解密的密码登录。
  • 如果出现提示,点击完成以结束设置。
步骤 5:连接 Oracle SQL Developer

连接至 EC2 实例后,按照以下步骤使用 Oracle SQL Developer 建立到 Oracle 数据库的连接。

步骤 1:打开 Oracle SQL Developer
  • 在任务栏中找到 Oracle SQL Developer 并打开。
    • 注意:您的图标顺序可能与参考图片不同。

Oracle SQL Developer 界面,显示包含数据库类型、主机名、端口和凭证字段的连接设置窗口

图 8 在 Oracle SQL Developer 中配置新数据库连接。

步骤 2:创建新的数据库连接
  • 点击左侧菜单中的加号(+)创建新数据库连接。
  • 输入以下信息:
    • Connection Name:Source Oracle
    • Username:dbadmin
    • Password:在 CloudFormation Stack 的 Outputs 选项卡下查看 DMSDBSecretP
    • Save Password:勾选
    • Hostname:在 CloudFormation Output 选项卡中查找 Source Oracle Endpoint。或前往 RDS 控制台,选择您的 Oracle 源实例并使用提供的 endpoint。
    • Port:1521
    • SID:ORACLEDB
步骤 3:测试并连接
  • 点击 Test 以验证连接。
  • 当测试状态显示“Successful”后,点击 Connect。
步骤 4:为 AWS DMS 迁移配置 Oracle

在将 Oracle 作为 AWS DMS 的源之前,请确保完成以下配置:

1. 创建具备所需权限的 DMS 用户

AWS DMS 需要一个在 Oracle 数据库上具有读写权限的用户账户(DMS 用户)。

2. 启用 ARCHIVELOG MODE
  • 必须启用ARCHIVELOG MODE,以便为 LogMiner 提供事务日志信息。
  • AWS DMS 依赖 LogMiner 从归档日志捕获变更数据。
  • 确保归档日志至少保留 24 小时,以防迁移过程中数据丢失。
3. 启用补充日志(supplemental logging)
  • 数据库级补充日志:
    • 确保 LogMiner 能捕获各种表结构(如簇表与索引组织表)所需的全部细节。
  • 表级补充日志:
    • 需要为计划迁移的每个表启用。
4. 为 AWS DMS 用户授予所需权限
  • 在 Oracle SQL Developer 中,点击 SQL Worksheet 图标。
  • 连接到 Source Oracle 数据库。
  • 从 Github Gist 复制、粘贴并执行语句,为 AWS DMS 用户授予必要权限。

在 Oracle SQL Developer 中运行 SQL 脚本,执行补充日志设置并修改表

图 9 在 Oracle SQL Developer 中执行 SQL 脚本。

步骤 6:配置 Amazon Aurora(MySQL)目标端

在完成初始设置与源数据库配置后,您可以迁移示例数据库。本指南将介绍如何使用 AWS Schema Conversion Tool(AWS SCT)和 AWS Database Migration Service(AWS DMS)转换数据库结构并将数据迁移到 Amazon Aurora(MySQL)。

此外,AWS DMS 将作为持续复制工具,这意味着源数据库中的所有更改都会实时复制到目标数据库。

  • 通过 RDP 重新连接到 EC2 实例。
  • 打开桌面上的 DMS Workshop 文件夹,双击AWS Schema Conversion Tool Download 以安装最新版本。
  • 解压并按照安装向导安装 AWS SCT(使用默认选项并点击 Finish)。
  • 从开始菜单或桌面的橙色 SCT 图标启动 AWS SCT,并接受条款。
  • 打开 MySQL Workbench 8.0 CE,为目标 Aurora MySQL 创建新的数据库连接,使用以下配置:
    • Connection Name:Target Aurora RDS (MySQL)
    • Host Name:<TargetAuroraMySQLEndpoint>(在 CloudFormation Outputs 或 RDS 控制台中查找)
    • Port:3306
    • Username:dbadmin
    • Password:在 CloudFormation Output 选项卡中获取
    • Default Schema:留空

MySQL Workbench 界面显示包含主机名、端口、用户名和密码字段的新连接设置

图 10 在 MySQL Workbench 中设置连接至 Amazon Aurora。

  • 点击Test Connection,确认成功后连接到 Aurora MySQL。
  • 在 MySQL Workbench 中执行 GitHub Gist 提供的 SQL 权限语句(点击闪电图标运行)。

安装好 AWS Schema Conversion Tool 后,下一步是在工具中创建数据库迁移项目。

步骤 1:启动新项目
  • 打开 AWS Schema Conversion Tool(SCT)。
  • 如果未自动启动新项目向导,前往 File > New Project Wizard。
  • 填写以下信息:
    • Project Name:AWS Schema Conversion Tool Source DB to Aurora MySQL
    • Location:C:\Users\Administrator\AWS Schema Conversion Tool
    • Database Type:选择 SQL Database
    • Source Engine:Oracle
    • Migration Type:选择 I want to switch engines and optimize for the cloud
  • 点击Next。
步骤 2:连接到源数据库
  • 填写源数据库配置:
    • Connection Name:Oracle Source
    • Type:SID
    • Server Name:<SourceOracleEndpoint>(在 CloudFormation Outputs 或 RDS 控制台中查找)
    • Server Port:1521
    • Oracle SID:ORACLEDB
    • User Name:dbadmin
    • Password:在 CloudFormation Output 选项卡中获取
    • Use SSL:未勾选
    • Store Password:已勾选
    • Oracle Driver Path:C:\Users\Administrator\Desktop\DMS Workshop\JDBC\ojdbc11.jar
  • 点击Test Connection。成功后点击Next。

AWS Schema Conversion Tool 在测试 Oracle 数据库连接后显示成功连接提示

图 11 在 AWS Schema Conversion Tool 中测试数据库连接。

步骤 3:选择数据库并查看评估报告
  • 选择 dms_sample 数据库,然后点击Next。
  • 若出现元数据加载警告,可忽略。
  • 查看数据库迁移评估报告:

AWS Schema Conversion Tool 评估报告,汇总转换操作与存储对象兼容性

图 12 查看数据库迁移评估结果。

  • 查看后点击Next。

注意:SCT 会自动转换大多数对象,并标注需要人工处理的部分。请特别关注过程、包和函数,这些对象可能需要修改。

步骤 4:连接到目标数据库
  • 填写目标数据库配置:
    • Target Engine:Amazon Aurora(兼容 MySQL)(从默认值更改)
    • Connection Name:Aurora MySQL Target
    • Server Name:<TargetAuroraMySQLEndpoint>(在 CloudFormation Outputs 或 RDS 控制台中查找)
    • Server Port:3306
    • User Name:dbadmin
    • Password:在 CloudFormation Output 选项卡中获取
    • Use SSL:未勾选
    • Store Password:已勾选
    • MySQL Driver Path:C:\Users\Administrator\Desktop\DMS Workshop\JDBC\mysql-connector-j-8.3.0.jar
  • 点击Test Connection。成功后,点击Finish。

创建好数据库迁移项目后,下一步是将源数据库架构转换为 Amazon Aurora MySQL。

步骤 5:将源数据库架构转换为 Amazon Aurora MySQL
  • 点击顶部菜单View,选择Assessment Report View。
  • 在左侧面板选择 DMS_SAMPLE 以显示数据库层级。
  • 进入Action Items 选项卡,查看无法自动转换的架构元素。
  • AWS SCT 会将项目分类为:
    • 绿色 – 成功转换。
    • 蓝色 – 迁移前需要人工修改。
  • 对于无法自动转换的架构元素,您有两种选择:
    • 修改源架构。
    • 在应用到目标数据库前编辑生成的 SQL 脚本。我们将在 AWS SCT 中手动调整一个存储过程,以兼容 Aurora MySQL。
步骤 6:修改 SQL 代码
  • 在左侧面板右键点击 DMS_SAMPLE 数据库。
  • 选择Convert Schema 以生成目标数据库的数据定义语言(DDL)语句。
  • 当提示存在对象时,点击Yes。

AWS Schema Conversion Tool 显示 Oracle 与 MySQL 数据库结构,并弹出替换对象的提示

图 13 使用 AWS Schema Conversion Tool 转换 Oracle 架构。

  • 在右侧面板右键点击 dms_sample_dbo(SQL Server 源)或 dms_sample(其他源)架构。
  • 选择Apply to database。
  • 出现提示时点击Yes确认。
  • 在右侧面板展开 dms_sample_dbo 或 dms_sample 架构。
  • 您现在应能看到在 Aurora MySQL 中成功创建的表、视图、存储过程等对象。

您已成功将数据库架构与对象转换为兼容 Amazon Aurora MySQL 的格式!

步骤 2:创建复制实例

按照以下步骤创建 DMS 复制实例:

  • 打开 AWS Database Migration Service(DMS)控制台,或在 AWS 搜索栏中搜索 DMS。
  • 在左侧菜单点击Replication Instances 进入复制实例管理界面。
  • 若已有预配置的复制实例,可跳过此步。但如需动手实践,请继续创建新实例:
  • 点击右上角的Create replication instance,并填写以下信息:
    • Name:DMSReplication-dms
    • Descriptive Amazon Resource Name (ARN):留空
    • Description:(可选)输入 "Replication server for Database Migration"
    • Instance Class:dms.c5.xlarge
    • Engine Version:保持默认
    • High Availability / Multi-AZ:选择 Dev or Test workload(Single-AZ)
    • Allocated Storage (GB):50
    • VPC:选择名称中包含 DMSVpc 的 VPC ID(必要时调整下拉)
    • Publicly Accessible:设为 No(不勾选)
    • Advanced -> VPC Security Group(s):选择默认安全组

创建复制实例

图 14 创建复制实例。

  • 输入复制实例所需信息,然后点击Create。

步骤 3:配置源与目标端点

有了复制实例后,下一步是为数据库迁移创建源与目标端点。按照以下步骤配置两个端点。

创建源端点

  • 打开 AWS DMS 控制台。
  • 在左侧菜单点击Endpoints。
  • 点击右上角的Create endpoint。
  • 为源数据库端点输入以下信息:
    • Endpoint Type:Source endpoint
    • Select RDS DB Instance:仅对 Oracle 勾选(其他类型留空)
    • RDS Instance:选择 <StackName>-SourceOracleDB
    • Endpoint Identifier:oracle-source(或使用预填值)
    • Descriptive ARN:留空
    • Source Engine:Oracle
    • Access to Endpoint Database:选择 “Provide access information manually”
    • Server Name:<SourceOracleEndpoint>(应自动填充)。
    • Port:1521
    • SSL Mode:None
    • User Name:dbadmin
    • Password:在 CloudFormation Stack 的 Outputs 选项卡下查看 2DMSDBSecretP
    • SID/Service Name:ORACLEDB
    • VPC:选择环境搭建时带有 DMSVpc 的 VPC ID
    • Replication Instance:选择 cfn-DMSReplication、DMSReplication 或您创建的复制实例(若已就绪)
  • 点击Run Test 以验证连通性。

verify connectivity

图 15 验证连通性。

  • 当测试状态变为“Successful”后,点击Create endpoint。

创建目标端点

按照相同流程为 Aurora RDS 数据库创建目标端点:

  • 再次点击Create endpoint。
  • 输入以下信息:
    • Endpoint Type:Target endpoint
    • Select RDS DB Instance:对所有 RDS 目标数据库勾选
    • RDS Instance:选择 <StackName>-AuroraMySQLInstance
    • Endpoint Identifier:aurora-mysql-target
    • Descriptive ARN:留空
    • Target Engine:Amazon Aurora MySQL
    • Access to Endpoint Database:选择 “Provide access information manually”
    • Server Name:TargetAuroraMySQLEndpoint(或应自动填充)。
    • Port:3306
    • SSL Mode:None
    • User Name:dbadmin
    • Password:在 CloudFormation Stack 的 Outputs 选项卡下查看 2DMSDBSecretP
    • VPC:选择环境搭建时带有 DMSVpc 的 VPC ID
    • Replication Instance:选择 cfn-DMSReplication、DMSReplication 或您创建的复制实例(若已就绪)
  • 点击Run Test 验证连通性。
  • 当测试状态变为“Successful”后,点击Create endpoint。

步骤 4:设置迁移任务

在 AWS DMS 迁移中处理外键约束

AWS DMS 在全量加载期间不会对待加载的表设定顺序,如果启用了约束,可能会导致外键违规。此外,目标数据库上的触发器可能会对数据造成意外更改。我们也从目标 Aurora MySQL 数据库中删除了外键约束。

  • 启动 MySQL Workbench 8.0 CE(前面用于权限设置)。
  • 打开一个新的查询窗口。
  • 删除外键约束:从 Oracle 迁移时,AWS SCT 不会自动创建约束,它只会创建索引。运行以下 SQL 脚本以删除这些索引:
DROP INDEX set_seat_idx ON dms_sample.sporting_event_ticket;
DROP INDEX set_ticketholder_idx ON dms_sample.sporting_event_ticket;
DROP INDEX set_sporting_event_idx ON dms_sample.sporting_event_ticket;
  • 点击 Execute(闪电图标)运行脚本。

MySQL Workbench 界面显示 SQL 查询

图 16 MySQL Workbench 界面显示 SQL 查询。

删除约束后,目标 Aurora MySQL 数据库现已准备好使用 AWS DMS 进行数据迁移!

创建 DMS 迁移任务

AWS DMS 使用数据库迁移任务将数据从源数据库移动到目标数据库。请按以下步骤创建并监控迁移任务。

步骤 1:创建迁移任务
  • 打开 AWS DMS 控制台。
  • 点击左侧菜单中的 Database migration tasks。
  • 点击右上角的 Create task。
步骤 2:配置任务设置
  • Task Identifier:source-to-AuroraMySQL-target
  • Replication Instance:cfn-dmsreplication
  • Source Database Endpoint:选择您的源数据库
  • Target Database Endpoint:cfn-auroramysqlinstance
  • Migration Type:迁移现有数据并复制持续变更
  • CDC Stop Mode:Don’t use custom CDC stop mode
  • Create Recovery Table on Target DB:未勾选
  • Target Table Preparation Mode:不执行任何操作(非默认值)
  • Stop Task After Full Load Completes:Don’t stop
  • LOB Column Settings / Include LOB Columns in Replication:Limited LOB mode
  • Max LOB Size (KB):32
  • Data Validation:未勾选
  • Enable CloudWatch Logs:已勾选
  • Log Context:默认级别
  • Batch-Optimized Apply:未勾选
步骤 3:配置表映射
  • 展开Table mappings部分。
  • 将编辑模式选择为 Wizard。
  • 点击 Add new selection rule,然后输入以下内容:
    • Schema:DMS_SAMPLE%
    • Table Name:%
    • Action:Include

配置表映射部分显示可应用的各种规则

图 17 配置表映射。

步骤 4:配置转换规则
  • 展开 Transformation rules部分。
  • 点击 Add new transformation rule并输入以下规则:
    • 规则 1:
      • Target:Schema
      • Schema Name: DMS_SAMPLE
      • Action:Make lowercase
    • 规则 2:
      • Target: Table
      • Schema Name: DMS_SAMPLE
      • Table Name: %
      • Action: Make lowercase
    • 规则 3:
      • Target:Column
      • Schema Name: DMS_SAMPLE
      • Table Name:%
      • Action:Make lowercase
步骤 5:完成并启动迁移任务
  • 取消勾选 Turn on premigration assessment(本教程不需要)。
  • 确保 Migration task startup configuration设置为 Start automatically on create。
  • 点击 Create task。

执行迁移

终于到了执行迁移的阶段!

步骤 1:启动迁移

任务会经历以下状态:

  • Creating → Ready → Starting → Running。
  • 点击圆形刷新按钮以更新状态。

显示数据迁移状态的图像

图 18 AWS DMS 迁移任务界面显示持续复制。

步骤 2:监控迁移

AWS DMS 提供 CloudWatch 指标来监控复制实例和迁移任务的性能。

查看复制实例的 CloudWatch 指标:

  • 打开 AWS DMS 控制台。
  • 点击左侧菜单中的 Replication Instances。
  • 选择您的复制实例。
  • 前往 CloudWatch Metrics选项卡以查看性能数据。

AWS CloudWatch 监控图表显示 CPU、内存和可用内存趋势。

图 19 AWS DMS 实例资源使用率图表。

查看迁移任务的 CloudWatch 指标:

  • 打开 AWS DMS 控制台。
  • 点击左侧菜单中的 Database Migration Tasks。
  • 从列表中选择您的 DMS 任务。
  • 前往 Monitor选项卡以分析任务性能。

AWS CloudWatch 显示全量加载吞吐带宽和行传输指标。

图 20 AWS DMS 全量加载吞吐指标。

借助 CloudWatch,您可以跟踪延迟、复制滞后和任务状态等关键指标。

步骤 3:处理迁移错误与警告

在 AWS DMS 迁移过程中,可能会因连接失败、数据完整性问题或配置错误而出现错误和警告。下面列出了常见问题及其排查步骤。

1. 连接失败

  • 问题:DMS 无法连接到源或目标数据库。
  • 解决方法:
    • 验证VPC 设置、安全组和子网可用性。
    • 确保使用正确的数据库主机名、端口和凭证。
    • 在 DMS 控制台中点击 Test Endpoint Connection测试连通性。

2. 数据完整性问题

  • 问题:源与目标之间缺失或不一致的数据。
  • 解决方法:
    • 启用 CDC 验证以检查缺失的事务。
    • 使用 CloudWatch 指标比较行数。
    • 在两个数据库上运行校验和验证查询,确保数据一致性。

3. 性能瓶颈

  • 问题:迁移速度慢或存在滞后。
  • 解决方法:
    • 启用 Parallel Load 以加速批量传输。
    • 调整 LOB 模式(处理大对象时使用 Full LOB 模式)。
    • 监控 CloudWatch 的 CPU、内存和复制滞后指标。

4. 目标数据库约束与触发器

  • 问题:外键违规或数据出现意外修改。
  • 解决方法:
    • 在迁移前禁用外键约束。
    • 在目标数据库上临时删除触发器以避免冲突。

5. CDC 复制意外停止

  • 问题:任务在应用持续变更之前停止。
  • 解决方法:
    • 在日志中检查 CDC 的起始位置。
    • 确保日志保留期足够(例如 Oracle LogMiner 需要 24 小时)。
    • 从最后一个已应用事务重新启动 CDC 任务。

6. 源与目标之间的架构不匹配

  • 问题:由于架构差异,某些对象迁移失败。
  • 解决方法:
    • 使用 AWS SCT(Schema Conversion Tool)评估不兼容项。
    • 必要时进行手动架构修改。

7. 检查日志并调试错误

  • 使用 AWS CloudWatch 日志:
    • 导航至 AWS DMS Console > Migration Tasks > View Logs。
    • 按错误关键字(如 failure、timeout 或 constraint violation)过滤日志。
  • 如需更深入的信息,可启用 Verbose Logging。

迁移后的步骤

现在,我们来看一下使用 DMS 完成迁移后可以采取的一些步骤。

步骤 1:验证数据完整性

AWS DMS 完成迁移后,验证数据完整性并确保目标数据库准确反映源数据库至关重要。以下是关键的验证方法:

使用 AWS DMS 的数据验证功能

  • 如果在 AWS DMS 中启用了数据验证,请导航至:
    • AWS DMS Console > Migration Tasks > Table Statistics
    • 检查是否有验证失败,并对受影响的表重新运行迁移。

AWS DMS 验证摘要显示没有待处理、失败或暂停的验证。

图 21 AWS DMS 验证摘要。

步骤 2:切换到目标数据库

当 AWS DMS 成功迁移所有数据并完成持续复制(CDC)后,最后一步是将目标数据库切换为主系统。请按以下步骤确保平稳过渡:

步骤 1:验证数据一致性

切换前,请确认所有数据已完全复制:

  • 检查源与目标之间的行数。
  • 对关键表运行校验和验证。
  • 查看 CloudWatch 的复制滞后指标(切换前应为零)。

步骤 2:停止源数据库上的新变更

为防止数据不一致:

  • 将源数据库设置为只读模式以禁用写入。
  • 确保所有写入数据库的应用程序改为指向新的目标数据库。

步骤 3:停止 AWS DMS 复制

  • 在 AWS DMS 控制台中,导航至 Database Migration Tasks。
  • 选择您的活动迁移任务。
  • 点击 Stop Task以停止持续复制。

AWS DMS 迁移任务停止

图 22 AWS DMS 迁移任务停止。

步骤 4:将目标数据库提升为主库

  • 移除目标数据库的只读限制
  • 更新应用程序的连接字符串以指向新数据库。

步骤 5:执行最终验证与测试

  • 测试关键的应用程序查询以确认功能正常。
  • 验证新事务已在目标系统中被正确处理。
  • 进行端到端测试,确保业务流程保持完整。

步骤 6:停用旧源数据库(如需)

  • 若源数据库不再需要,可进行归档或停用。
  • 在完全移除源系统前保留备份。

步骤 3:清理与收尾

步骤 1:停止并删除迁移任务

  • 打开 AWS DMS 控制台。
  • 在左侧菜单中点击 Database Migration Tasks。
  • 选择您创建的迁移任务。
  • 点击 Actions > Stop并确认。
  • 当任务状态变为“Stopped”后,点击 Actions > Delete并确认。

步骤 2:删除 DMS 端点

  • 在 AWS DMS 控制台中,点击左侧菜单的 Endpoints。
  • 选择在本教程中创建的端点。
  • 点击 Actions > Delete并确认。

AWS DMS 端点删除

图 23 AWS DMS 端点删除。

步骤 3:删除 CloudFormation 堆栈

AWS 界面提示确认删除 CloudFormation 堆栈。

图 24 在 AWS 中确认删除堆栈。

  • 确认删除——CloudFormation 会自动移除所有关联资源(可能需要最多 15 分钟)。
  • 在 CloudFormation 控制台中监控,确保堆栈已完全删除。

AWS DMS 的高级功能

现在,我们来看一下使用 AWS DMS 可以解决的一些更复杂的场景。

迁移过程中的数据转换

AWS DMS 支持在迁移过程中进行数据转换,例如更改列数据类型、重命名表和列以及筛选数据。这些转换有助于使源架构与目标数据库结构保持一致。通过在 Table Mappings部分使用转换规则,您可以在不更改源数据库的情况下动态应用这些更改。

有关详细步骤,请参阅这篇博客文章:转换列内容。

将 S3 作为目标使用 AWS DMS

AWS DMS 可以将数据迁移到 Amazon S3,为分析、机器学习或进一步处理提供高性价比的存储,可配合 AWS Glue、Athena 或 Redshift 等服务使用。

请按以下步骤将 Amazon S3 配置为 AWS DMS 迁移的目标端。

步骤 1:创建 S3 存储桶

  • 打开 Amazon S3 控制台。
  • 点击 Create bucket。
  • 将 Bucket Name 设置为:dmstargetbucket-<random 4-digit number>
  • 确保区域与 AWS DMS 资源匹配。
  • 保持其他设置为默认,然后点击 Create bucket。

步骤 2:在 S3 存储桶中创建文件夹

  • 打开新创建的存储桶。
  • 点击 Create folder。
  • 将文件夹命名为 dmstargetfolder。
  • 保持所有默认设置并点击 Create folder。

步骤 3:为 S3 访问创建 AWS IAM 策略

  • 打开 IAM 控制台并前往 Policies(策略)。
  • 点击Create policy,然后选择JSON 选项卡。
  • 复制并粘贴以下策略,将 "REPLACE-WITH-YOUR-BUCKET-NAME" 替换为您的实际存储桶名称:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::REPLACE-WITH-YOUR-BUCKET-NAME*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::REPLACE-WITH-YOUR-BUCKET-NAME*"
      ]
    }
  ]
}
  • 点击 Review policy。
  • 将策略名称设置为 DMS-tutorial-S3-Access-Policy,然后点击Create policy。

步骤 4:将策略附加到 IAM 角色

  • 在 IAM 控制台中,前往 Roles(角色)。
  • 搜索 “dms-vpc” 并选择 dms-vpc-role。
  • 点击 Add permissions > Attach policies。

AWS IAM 权限管理界面,显示已附加的策略

图 25 AWS IAM 策略管理。

  • 选择 DMS-LAB-S3-Access-Policy 并点击 Add permissions。

步骤 5:保存 IAM 角色 ARN

  • 在 dms-vpc-role 概览页面,复制 Role ARN。
  • 保存以便之后在 AWS DMS 配置中使用。

创建 S3 目标端点

现在已为 S3 存储桶配置了相应的策略和角色,下一步是在 AWS DMS 中创建目标端点。

  • 打开 AWS DMS 控制台。
  • 点击左侧菜单中的 Endpoints。
  • 点击右上角的 Create endpoint。
  • 配置目标端点 S3。
  • 输入以下值:
    • Endpoint Type:Target endpoint
    • Endpoint Identifier:S3-target
    • Descriptive ARN:留空
    • Target Engine:Amazon S3
    • Server Name:<ARN of the dms-vpc-role>
    • Bucket Name: <Your S3 Bucket Name>
    • Bucket Folder: dmstargetfolder
  • 点击 Run Test 以验证连接。
  • 测试为 “Successful” 后,点击 Create endpoint。

创建 DMS 迁移任务

步骤 1:创建迁移任务
  • 打开 AWS DMS 控制台。
  • 点击左侧菜单中的 Database migration tasks。
  • 点击右上角的 Create task。
步骤 2:配置任务设置
  • Task Identifier: source-to-AuroraMySQL-target
  • Replication Instance: cfn-dmsreplication
  • Source Database Endpoint: 选择您的源数据库
  • Target Database Endpoint: cfn-auroramysqlinstance
  • Migration Type: 迁移现有数据并复制持续变更
  • CDC Stop Mode: 不使用自定义 CDC 停止模式
  • Create Recovery Table on Target DB: 未勾选
  • Target Table Preparation Mode: 不执行任何操作(非默认)
  • Stop Task After Full Load Completes: 不停止
  • LOB Column Settings / Include LOB Columns in Replication: 受限 LOB 模式
  • Max LOB Size (KB): 32
  • Data Validation: 未勾选
  • Enable CloudWatch Logs: 已勾选
  • Log Context: 默认级别
  • Batch-Optimized Apply: 未勾选
步骤 3:配置表映射
  • 展开 Table mappings 部分。
  • 选择 Wizard 作为编辑模式。
  • 点击 Add new selection rule,然后输入以下内容:
    • Schema:DMS_SAMPLE%
    • Table Name:%
    • Action:Include

配置表映射

图 26 配置表映射

步骤 4:配置转换规则
  • 展开 Transformation rules 部分。
  • 点击 Add new transformation rule 并输入以下规则:
    • 规则 1:
      • Target: Schema
      • Schema Name: DMS_SAMPLE
      • Action: 转为小写
    • 规则 2:
      • Target: Table
      • Schema Name: DMS_SAMPLE
      • Table Name: %
      • Action: 转为小写
    • 规则 3:
      • Target: Column
      • Schema Name: DMS_SAMPLE
      • Table Name: %
      • Action: 转为小写
步骤 5:完成并启动迁移任务
  • 取消勾选 Turn on premigration assessment(本次工作坊不需要)。
  • 确保 Migration task startup configuration 设置为 Start automatically on create。
  • 点击 Create task。
步骤 6:监控迁移进度
  • 点击迁移任务(source-to-s3-target)。
  • 滚动到 Table Statistics 查看已迁移的行数。
  • 如果状态变为红色(错误),点击 View Logs,使用 CloudWatch 日志进行排查。

AWS DMS 最佳实践

现在,让我们看看在使用 AWS DMS 进行数据迁移时应采用的一些最佳实践。

优化性能

为确保使用 AWS DMS 进行高效快速的数据库迁移,请考虑以下优化:

  • 选择合适的复制实例规格
    • 对于高吞吐迁移,使用更大的实例类型(如 dms.r5.large 或更高)。
    • 通过 CloudWatch 监控 CPU、内存和 IOPS,并在需要时扩容实例。
  • 使用多个迁移任务进行并行处理
    • 按表分组将大型迁移拆分为多个任务,以减少加载时间。
    • 将大表与小表分开迁移,以平衡性能。
  • 优化网络连接
    • 将 DMS 复制实例与源、目标数据库放在同一 VPC 和可用区。
    • 使用 VPC 终端节点或 Direct Connect,以提升网络稳定性并降低延迟。
  • 调整 LOB 设置
    • 对于大对象(LOB),使用受限 LOB 模式,并设置合适的 LOB 大小以尽量减少性能影响。
  • 启用并行加载和批量应用
    • 开启 Batch Optimized Apply,以更快地向目标数据库插入数据。
    • 对大规模迁移使用 Parallel Load,同时处理多张表。

规划停机时间

在数据库迁移期间尽量减少停机时间对于维护业务连续性至关重要。以下是确保顺利切换的关键策略:

  • 在低流量时段进行迁移
    • 将切换安排在非高峰时段,以尽量减少对用户的影响。
    • 提前通知相关方,为临时中断做好准备。
  • 使用持续复制(CDC)
    • 启用变更数据捕获(CDC),使目标数据库与源保持同步。
    • 这有助于应用以最小的数据丢失完成切换。
  • 执行测试切换
    • 在预发布环境上运行一次试迁移,再进行最终切换。
    • 验证性能并解决任何架构或数据不一致问题。
  • 降低 DNS 切换影响
    • 准备基于 DNS 的数据库连接,以便无缝切换至新目标。
    • 仅在验证迁移后更新应用的连接字符串。
  • 最终切换前将源设为只读
    • 将源数据库设为只读,阻止新的事务。
    • 在将应用指向目标前,确保所有待处理变更均已完成复制。

保障数据安全

迁移期间的数据安全对于保护敏感信息并满足合规要求至关重要。

  • 使用 SSL/TLS 加密传输中的数据
    • 为源与目标数据库连接启用 SSL/TLS,防止被拦截。
    • 使用基于证书的身份验证以增强安全性。
  • 通过 AWS IAM 角色与策略限制访问
    • 为 DMS 复制实例与端点分配最小权限的 IAM 角色。
    • 使用 IAM 策略将访问限制到特定数据库、S3 存储桶和 CloudWatch 日志。
  • 启用静态数据加密
    • 使用 AWS Key Management Service(KMS)对 Amazon S3 或 RDS 数据进行加密。
    • 确保目标数据库支持加密以实现安全存储。

排查 AWS DMS

DMS 功能强大,但并非没有问题。以下是排查最常见问题的方法。

常见错误与解决方案

AWS DMS 迁移可能会遇到与数据库连接、架构不匹配以及复制失败相关的错误。

1. 数据库连接错误

  • 错误: "Failed to connect to database endpoint."
  • 解决方法:
    • 验证 VPC、安全组和子网设置。
    • 检查数据库是否可从 DMS 复制实例访问。
    • 在 DMS 端点设置中确保主机、端口和凭证正确。
    • 在 DMS 控制台使用 "Test Endpoint Connection" 选项进行连通性测试。

2. 数据类型兼容性问题

  • 错误: "Unsupported data type conversion between source and target."
  • 解决方法:
    • 使用 AWS Schema Conversion Tool(SCT)识别不兼容的数据类型。
    • 如有需要,在目标架构中手动修改列的数据类型。
    • 在 DMS 中启用转换规则,自动转换不兼容类型。

3. 外键约束冲突

  • 错误: "Foreign key constraint violation in target database."
  • 解决方法:
    • 在迁移前禁用外键约束,完成后再启用。
    • 如果向现有表重新加载数据,使用 "Truncate before load"。

4. 迁移性能缓慢

  • 错误: "Replication lag increasing significantly."
  • 解决方法:
    • 使用更大的 DMS 复制实例(dms.r5.large 或更高)。
    • 启用 Parallel Load 和 Batch Optimized Apply,以更快地导入数据。
    • 将 DMS、源与目标放在同一 VPC,以优化网络连接。

5. 持续复制(CDC)意外停止

  • 错误: "CDC task stopped due to missing log files."
  • 解决方法:
    • 确保源数据库具备足够的日志保留时间(例如 Oracle LogMiner 需 24 小时)。
    • 从最后一个已应用事务重新启动 CDC 任务。

使用 DMS 日志进行排查

AWS DMS 提供任务日志与 CloudWatch 集成,帮助高效定位并解决迁移问题。

1. 访问 DMS 任务日志

  • 在 AWS DMS 控制台,前往 Database Migration Tasks。
  • 选择出现问题的迁移任务。
  • 点击 Monitoring 查看错误信息与执行详情。

AWS CloudWatch 日志显示与 DMS 迁移相关的错误与警告。

图 27 含迁移错误的 AWS CloudWatch 日志

2. 使用 AWS CloudWatch 进行详细调试

  • 导航至 AWS CloudWatch Console > Logs。
  • 查找 DMS 复制实例日志组(/aws/dms/replication-instance-ID)。
  • 在 DMS 任务设置 中启用 verbose logging 以捕获更多细节。

AWS CloudWatch 显示迁移任务的详细日志事件。

图 28 AWS CloudWatch 事件概览

总结

AWS Database Migration Service(DMS)可在尽量减少停机的情况下,简化跨不同数据库引擎的数据迁移。通过遵循最佳实践——如优化性能、保障数据安全、管理架构变更以及排查常见问题——您可以确保迁移过程顺利进行。

现在您已经完成端到端的 AWS DMS 迁移,已准备好充分利用新的云端数据库,实现更好的可扩展性、分析能力和云原生优化。若您想进一步提升 AWS 知识,请探索 AWS Cloud Practitioner Certification 方向,或从 AWS Concepts 与 AWS Security & Cost Management 入门。

Rahul Sharma

作者

Rahul Sharma

Rahul Sharma 是一位 AWS 大使、DevOps 架构师与技术博主,专注于云计算、DevOps 实践与开源技术。凭借在 AWS、Kubernetes 与 Terraform 方面的专长,他通过生动易懂的文章与教程,为学习者与专业人士化繁为简。Rahul 热衷于解决 DevOps 难题,并分享洞见以赋能技术社区。

主题