设置 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 控制台
- 使用您的凭证登录AWS 管理控制台。
- 点击屏幕右上角的下拉菜单并选择您的区域。本教程中我将选择N. Virginia 区域。

图 1 在 AWS 管理控制台中选择区域。
- 进入EC2 控制台,导航到密钥对(Key Pair)部分。确保与上一步处于相同区域。
- 点击创建密钥对(Create Key Pair),命名为“DMS”。
图 2 在 AWS EC2 中创建用于安全访问的密钥对。
- 点击创建(Create),浏览器将下载
DMS.pem。 - 请妥善保存此文件——后续步骤将用到。
配置环境
在此步骤中,您将使用 CloudFormation(CFN)模板来搭建数据库迁移所需的 AWS 基础设施。这将自动化部署,让您专注于迁移任务。
- 打开 AWS CloudFormation 控制台,点击 Create Stack。
- 选择 Choose an existing template,然后选择 Upload a template file。

图 3 上传 CloudFormation 模板以创建新栈。
- 从 Github Gist 下载文件并点击 Choose file。
- 上传
DMS.yaml文件并点击 Next。 - 按要求填写参数,然后点击 Next。

图 4 配置 AWS DMS CloudFormation 栈的参数
注意:您可根据需求调整实例类型,或保持默认设置。
- 在 Stack Options 页面保持默认设置并点击 Next。
- 检查配置并点击 Create stack。
- 系统将跳转回 CloudFormation 控制台,状态显示为“CREATE_IN_PROGRESS”。等待其变为“CREATE_COMPLETE”。

图 5 在 AWS CloudFormation 中查看资源创建状态
- 完成后,进入 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)”。

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

图 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 并打开。
- 注意:您的图标顺序可能与参考图片不同。

图 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 用户授予必要权限。

图 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:留空

图 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。

图 11 在 AWS Schema Conversion Tool 中测试数据库连接。
步骤 3:选择数据库并查看评估报告
- 选择
dms_sample数据库,然后点击Next。 - 若出现元数据加载警告,可忽略。
- 查看数据库迁移评估报告:

图 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。

图 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 以验证连通性。

图 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(闪电图标)运行脚本。

图 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选项卡以查看性能数据。

图 19 AWS DMS 实例资源使用率图表。
查看迁移任务的 CloudWatch 指标:
- 打开 AWS DMS 控制台。
- 点击左侧菜单中的 Database Migration Tasks。
- 从列表中选择您的 DMS 任务。
- 前往 Monitor选项卡以分析任务性能。

图 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
- 检查是否有验证失败,并对受影响的表重新运行迁移。

图 21 AWS DMS 验证摘要。
步骤 2:切换到目标数据库
当 AWS DMS 成功迁移所有数据并完成持续复制(CDC)后,最后一步是将目标数据库切换为主系统。请按以下步骤确保平稳过渡:
步骤 1:验证数据一致性
切换前,请确认所有数据已完全复制:
- 检查源与目标之间的行数。
- 对关键表运行校验和验证。
- 查看 CloudWatch 的复制滞后指标(切换前应为零)。
步骤 2:停止源数据库上的新变更
为防止数据不一致:
- 将源数据库设置为只读模式以禁用写入。
- 确保所有写入数据库的应用程序改为指向新的目标数据库。
步骤 3:停止 AWS DMS 复制
- 在 AWS DMS 控制台中,导航至 Database Migration Tasks。
- 选择您的活动迁移任务。
- 点击 Stop Task以停止持续复制。

图 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并确认。

图 23 AWS DMS 端点删除。
步骤 3:删除 CloudFormation 堆栈
- 打开 AWS CloudFormation 控制台。
- 选择在本教程中创建的 CloudFormation 堆栈。
- 点击 Delete(右上角)。

图 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。

图 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 查看错误信息与执行详情。

图 27 含迁移错误的 AWS CloudWatch 日志
2. 使用 AWS CloudWatch 进行详细调试
- 导航至 AWS CloudWatch Console > Logs。
- 查找 DMS 复制实例日志组(
/aws/dms/replication-instance-ID)。 - 在 DMS 任务设置 中启用 verbose logging 以捕获更多细节。

图 28 AWS CloudWatch 事件概览
总结
AWS Database Migration Service(DMS)可在尽量减少停机的情况下,简化跨不同数据库引擎的数据迁移。通过遵循最佳实践——如优化性能、保障数据安全、管理架构变更以及排查常见问题——您可以确保迁移过程顺利进行。
现在您已经完成端到端的 AWS DMS 迁移,已准备好充分利用新的云端数据库,实现更好的可扩展性、分析能力和云原生优化。若您想进一步提升 AWS 知识,请探索 AWS Cloud Practitioner Certification 方向,或从 AWS Concepts 与 AWS Security & Cost Management 入门。
Rahul Sharma 是一位 AWS 大使、DevOps 架构师与技术博主,专注于云计算、DevOps 实践与开源技术。凭借在 AWS、Kubernetes 与 Terraform 方面的专长,他通过生动易懂的文章与教程,为学习者与专业人士化繁为简。Rahul 热衷于解决 DevOps 难题,并分享洞见以赋能技术社区。

随着组织通过云技术推进基础设施现代化,将数据库迁移到 AWS 至关重要。AWS 提供了强大的迁移工具 AWS Database Migration Service(DMS),可实现从本地数据库、自管云数据库以及其他 AWS 服务进行低风险、近乎即时的迁移。
在本教程中,您将了解如何设置并使用 AWS DMS 来满足数据库迁移需求。您将学习:
让我们开始吧!
什么是 AWS DMS?
AWS Database Migration Service(DMS)让您能够轻松将数据库迁移到 AWS,且无需停机。它支持同构与异构迁移,例如从 MySQL 到 MySQL,或从 Oracle 到 PostgreSQL,是组织上云的重要工具。
通过 AWS DMS,您可以:
AWS DMS 广泛用于:
AWS DMS 的功能
AWS DMS 提供多项关键功能以支持数据库迁移:
1. 同构与异构迁移
2. 通过变更数据捕获(CDC)实现最小停机
3. 全托管且可扩展
4. 广泛的数据库兼容性
5. 借助 AWS SCT 进行架构转换
6. 持续监控与日志记录
7. 安全与合规