Knowledge Center Monthly Newsletter - June 2025
Stay up to date with the latest from the Knowledge Center. See all new Knowledge Center articles published in the last month, and re:Post's top contributors.
如何解决 AWS DMS 端点连接故障?
我无法连接到 AWS Database Migration Service (AWS DMS) 端点,我的测试连接出现故障。我想解决连接问题。
简短描述
当您测试从复制实例到源端点或目标端点的连接时,您可能会收到两种类型的错误:连接问题和本地数据库问题。您必须先解决这些问题,然后才能成功完成测试。
解决方法
连接问题
如果错误是由于复制实例与源或目标之间的连接问题而发生的,则您会收到类似于以下内容的错误:
- "Application-Status: 1020912, Application-Message: Failed to connect Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HYT00 NativeError: 0 Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired ODBC general error.”
- “Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]timeout expired ODBC general error.”
- “Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider ODBC general error., Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2005 Message: [unixODBC][MySQL][ODBC 5.3(w) Driver]Unknown MySQL server host 'mysql1.xxxxx.us-east-1.rds.amazonaws.com' (22) ODBC general error."
本地数据库错误
如果错误是由于本地数据库错误(例如,数据库权限或身份验证错误)而发生的,则您会收到类似于以下内容的错误:
- "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]FATAL: password authentication failed for user "dmsuser" ODBC general error."
**注意:**最佳做法是在创建 AWS DMS 源端点和目标端点之后,测试从 AWS DMS 复制实例到端点的连接。请在开始 AWS DMS 迁移任务之前完成测试。否则,由于端点的连接问题,任务可能会失败。
解决 AWS 托管资源的连接问题
确认您可以在源数据库或目标数据库与复制实例之间建立连接。根据您的用例和网络基础设施,将源数据库或目标数据库连接到公有子网或私有子网中的复制实例。有关详细信息,请参阅为复制实例设置网络。
**注意:**AWS DMS 3.4.7 及更高版本要求您配置 AWS DMS 以使用虚拟私有云 (VPC) 端点。或者,您必须使用公共路由访问与特定 Amazon Web Services 交互的所有源端点和目标端点。如果 AWS DMS 端点测试在早期版本上成功但在更高版本上失败,请参阅将 VPC 端点配置为 AWS DMS 源端点和目标端点。
检查您的复制实例配置
在您的复制实例中,确认您的配置包含下面的内容:
- IP 地址的出站规则,该出站规则在安全组中包含源数据库或目标数据库的端口。默认情况下,安全组的出站规则允许所有流量。安全组是有状态的,因此无需修改入站规则的默认值。
- IP 地址的出站规则,该出站规则在网络 ACL 中包含源数据库或目标数据库的端口。默认情况下,网络访问控制列表 (ACL) 的出站规则允许所有流量。
- IP 地址的入站规则,该入站规则在网络 ACL 中包含源数据库或目标数据库的临时端口。默认情况下,网络 ACL 的入站规则允许所有流量。
检查源数据库或目标数据库配置
在源数据库或目标数据库中,确认配置包含以下内容:
- 复制实例的 IP 地址的入站规则,或复制实例的子网组的无类别域间路由 (CIDR)。入站规则必须在安全组中包含源数据库或目标数据库的端口。安全组是有状态的,因此无需修改出站规则的默认值。
**注意:**要查找 IP 地址和 CIDR,请参阅“确定子网组的 IP 地址和 CIDR”部分。 - 复制实例的 IP 地址的入站规则,或复制实例的子网组的 CIDR。入站规则必须在网络 ACL 中包含源数据库或目标数据库的端口。确认对允许的 IP 地址和端口没有明确的拒绝规则。
- 复制实例子网组的 IP 地址或 CIDR 的出站规则,其中临时端口位于网络 ACL 中。默认情况下,网络 ACL 的出站规则允许所有流量。
- 最佳做法是将网络配置为允许复制实例的子网组的 CIDR。复制实例的 IP 地址在失效转移或主机更换事件期间发生更改。
确定子网组的 IP 地址和 CIDR
要设置入站和出站规则,请确定子网组的 IP 地址和 CIDR。您可以使用 AWS DMS 控制台或 AWS CLI。
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,确保您使用的是最新版本的 AWS CLI。
AWS DMS 控制台
完成以下步骤:
- 打开 AWS DMS 控制台。
- 在导航窗格中,选择 Replication instances(复制实例)。
- 选择复制实例的名称。
- 在 Details(详细信息)下,复制复制实例的 Public IP address(公有 IP 地址)、Private IP address(私有 IP 地址)和 Replication subnet group(复制子网组)。
- 在 Replication subnet group(复制子网组)下,选择用于访问子网组页面的链接。复制子网组中每个子网的名称。
- 要验证每个子网的 CIDR,请打开 Amazon Virtual Private Cloud (Amazon VPC) 控制台。
- 在 Subnets(子网)选项卡中,搜索在步骤 5 中记下的子网。对于每个子网,记下 CIDR。
AWS CLI
要确定每个子网的 CIDR,请运行 describe-subnets 命令。
aws ec2 describe-subnets --filters Name=subnet-id,Values="$(aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].ReplicationSubnetGroup.Subnets[*].SubnetIdentifier" --output text | sed -e 's/\t/,/g')" --query "Subnets[*].{SubnetId:SubnetId,CidrBlock:CidrBlock}" --output table
注意: 请将 replication-instance-name 替换为您的复制实例的名称。
要确定复制实例的 IP 地址,请运行 describe-replication-instances 命令。
aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].{ReplicationInstancePublicIpAddresses:ReplicationInstancePublicIpAddresses,ReplicationInstancePrivateIpAddresses:ReplicationInstancePrivateIpAddresses}" --output table
注意: 请将 replication-instance-name 替换为您的复制实例的名称。
解决连接问题(本地资源)
如果源数据库或目标数据库托管在本地,请确认下列事项:
- 该数据库允许来自 AWS DMS 复制实例的传入连接。要进行确认,请咨询您的网络管理员。
- 防火墙不会阻止与源数据库或目标数据库的通信。
- DNS 配置设置正确。如果需要 DNS 解析,请使用 Amazon Route 53 Resolver。有关如何使用本地名称服务器通过 Amazon Route 53 Resolver 解析端点的信息,请参阅 Using your own on-premises name server。
-or-
通过 AWS CLI 创建新的 AWS DMS 实例,以使用客户 DNS 名称服务器 (--dns-name-servers) 来解决 DNS 问题。默认情况下,AWS DMS 实例使用 Amazon 提供的 DNS 进行解析。当源或目标配置为使用自定义 DNS 时,AWS DMS 端点可能会出现故障。有关详细信息,请参阅 create-replication-instance。
确保 Amazon Elastic Compute Cloud (Amazon EC2) 实例的网络配置与存在连接问题的 AWS DMS 复制实例相同。要对网络连接进行故障排除,请在新的 Amazon EC2 实例上运行以下命令:
telnet database_IP_address_or_DNS port_number
**注意:**请将 database_IP_address_or_DNS 替换为为 AWS DMS 源端点或目标端点指定的数据库的 IP 地址或域名。将 port_number 替换为为 AWS DMS 源端点或目标端点指定的数据库的端口号。
然后,运行以下命令:
nslookup domain_name
**注意:**请将 domain_name 替换为为 AWS DMS 源端点或目标端点指定的数据库的域名。
解决本地数据库错误
要解决本地数据库错误,请确认下列端点配置设置正确:
- 用户名
- 密码
- ServerName 设置为本地数据库或 Amazon Relational Database Service (Amazon RDS) 端点的 DNS 或 IP
- 端口
- 数据库名称
**注意:**不要为 MySQL 源或目标指定数据库名称。
如果使用 AWS Secrets Manager 指定了其中任何字段,请参阅使用密钥访问 AWS Database Migration Service 端点。
有关与源数据库或目标数据库相关的本地数据库错误,请参阅特定数据库文档中的解决方法。使用您在 AWS DMS 控制台中收到的错误代码和错误消息。
有关详细信息,请查看源数据库或目标数据库中的错误、跟踪、警报或其他日志。
对于数据库访问错误,请确认 AWS DMS 对于特定源或目标所需的权限。
有关如何使用 SSL 加密源端点和目标端点连接的详细信息,请参阅将 SSL 与 AWS Database Migration Service 结合使用。
相关信息
如何排查使用 AWS DMS 时出现的 Amazon S3 端点连接测试故障?
如何为使用 Amazon Redshift 作为目标端点的 AWS DMS 任务排查连接故障和错误?