如何排查 AWS DMS 终端节点连接故障?

上次更新时间:2019 年 9 月 26 日

我无法连接到我的 AWS Database Migration Service (AWS DMS) 终端节点。为什么测试连接出现故障,我该如何排查这些连接方面的问题?

解决方法

创建 AWS DMS 源终端节点和目标终端节点后,最好先测试从 AWS DMS 复制实例到这些终端节点的连接,然后再开始 AWS DMS 迁移任务。测试连接有助于确保任务不会因与终端节点有关的连接问题而失败。

对于要连接到源终端节点和目标终端节点的 AWS DMS 复制实例,AWS DMS 复制实例所用安全组必须包含终端节点的 IP 地址(对应特定端口)的出站规则。如果复制实例所用安全组中的出站规则正确无误,则检查源数据库或目标数据库的入站网络或安全配置。有关更多信息,请参阅添加、删除和更新规则

如果是因访问数据库被拒而出现的错误,您可能会看到类似以下内容的错误:

Test Endpoint failed: 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.
Test Endpoint failed: 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.chulbfpmdg0x.us-east-1.rds.amazonaws.com' (22) ODBC general error.

要解决这些错误,请确认是否正确设置了以下终端节点详细信息:

  • 用户名和密码
  • ServerName(数据库实例终端节点名称)
  • 端口

如果是由网络配置或超时导致的错误,您可能会看到类似以下内容的错误:  

Test Endpoint failed:
    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.
Test Endpoint failed: 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.

要解决这些错误,请查看适用于终端节点数据库引擎 NativeError 的解决方法。

源数据库或目标数据库托管在 AWS 上

首先,请确认数据库是否已将安全组配置为允许传入流量来自 AWS DMS 复制实例的 IP 地址。

要验证复制实例的公有和私有 IP 地址,请执行以下步骤:

  1. 打开 AWS DMS 控制台,并从导航窗格中选择复制实例
  2. 选择您的复制实例名称。
  3. 详细信息部分,您可以查看复制实例的公有 IP 地址私有 IP 地址。您也可以运行 describe-replication-instances,查看复制实例的 IP 地址:

私有 IP 地址

aws dms describe-replication-instances
    --filters Name=replication-instance-id,Values=<DMS replication instance name> "ReplicationInstances[*].ReplicationInstancePrivateIpAddress" --output=text

公有 IP 地址

aws dms describe-replication-instances --filters Name=replication-instance-id,Values=<DMS replication instance name> "ReplicationInstances[*].ReplicationInstancePublicIpAddress" --output=text

然后,确认 Amazon Virtual Private Cloud (Amazon VPC) 的网络访问控制列表 (ACL) 规则不会将传入流量仅限于源数据库或目标数据库,也不会仅限于复制实例,例如,显式拒绝规则。最后,确认与数据库关联的子网的路由表具有允许公有或私有网络流量的必要条目。

源数据库或目标数据库托管在本地

请与您的网络管理员核实,以确定您的数据库是否已设置为允许传入连接来自 AWS DMS 复制实例。验证是否正确设置了 DNS 配置,以及有没有防火墙阻止与源数据库或目标数据库的通信。

如果您无法识别网络连接中的瓶颈,请在同一 VPC 中创建一个新的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,并使用与 AWS DMS 复制实例相同的网络配置。在新的测试 EC2 实例中,运行以下命令来进一步排查网络连接问题:

telnet <IP address of host database server> <port number>
nslookup <Fully qualified domain name for the database server>
tracert <IP address of host database server>