如何解决连接到 Amazon RDS 数据库实例时出现的问题?

上次更新时间:2020 年 8 月 14 日

我无法连接到我的 Amazon Relational Database Service (Amazon RDS) 数据库实例。我为什么没法连接,该怎样解决此问题?

简短描述

无法连接到 Amazon RDS 数据库实例的原因可能有多个。以下是几种最常见的原因:

  • RDS 数据库实例未处于可用状态,因此无法接受连接。
  • 在获得授权访问安全组、网络访问控制列表 (ACL) 或本地防火墙内的数据库实例的源中,缺少用于连接到数据库实例的源。
  • 用于连接到数据库实例的 DNS 名称或终端节点错误。
  • 多可用区数据库实例进行了故障转移,辅助数据库实例使用不允许入站连接的子网或路由表。
  • 用户身份验证不正确。

提示:您可以使用以下问题排查步骤来确定出现连接问题的源头。或者,您可以使用 AWSSupport-TroubleshootConnectivityToRDS AWS Systems Manager Automation 文档来诊断问题。此自动化文档可根据于 Amazon Elastic Compute Cloud (Amazon EC2) 实例的主 IP 地址诊断网络 ACL,但不会验证临时端口。该自动化文档还会根据 EC2 实例的主 IP 地址检查安全组,但它不会检查特定端口。有关更多信息,请参阅运行简单的自动化工作流程

解决方法

请确保您的数据库实例处于可用状态

如果您最近启动或重启了数据库实例,请确认该数据库实例在 Amazon RDS 控制台中处于可用状态。根据数据库实例的大小,最长可能需要 20 分钟,数据库实例才可用于网络连接。

如果您的数据库实例处于故障状态,请参阅为什么我的 Amazon RDS 数据库实例处于故障状态?

请确保您的数据库实例允许连接

确保来自连接到数据库实例的源的流量未通过以下一项或多项措施进行门控:

  • 与数据库实例关联的任何 Amazon Virtual Private Cloud (Amazon VPC) 安全组。 如有必要,请将规则添加到与 VPC 关联的安全组,以允许与源相关的流量进出数据库实例。您可以指定 IP 地址、IP 地址范围或其他 VPC 安全组。有关 VPC 和数据库实例的一般信息,请参阅在 VPC 中访问数据库实例的方案
  • 任何与该数据库实例关联的数据库安全组。 如果数据库实例不在 VPC 中,则可能是正在使用数据库安全组来对流量进行门控。更新数据库安全组以允许来自您连接的 IP 地址范围、Amazon EC2 安全组EC2 Classic 实例的流量。
  • VPC 外部的连接。确保数据库实例可公开访问,并且数据库实例与公有子网关联(例如,路由表允许从互联网网关访问)。有关更多信息,请参阅在 VPC 中访问数据库实例的方案
  • 网络 ACL。 网络 ACL 在 VPC 中充当防火墙,以保护特定子网内的资源。如果您在 VPC 中使用 ACL,请确保其具有允许出入数据库实例的入站和出站流量的规则
  • 网络或本地防火墙。 请咨询您的网络管理员,以确定您的网络是否允许流量出入数据库实例用于入站和出站通信的端口。
    注意:Amazon RDS 不接受互联网控制消息协议 (ICMP) 流量,包括 ping。

解决潜在的 DNS 名称或终端节点问题

连接到数据库实例时,使用 Amazon RDS 控制台提供的 DNS 名称(终端节点)。确保使用正确的终端节点,并以正确的格式将终端节点提供给用于连接到数据库实例的客户端。有关数据库引擎连接教程的列表,包括有关如何在各种客户端应用程序中查找和正确使用终端节点的说明,请参阅 Amazon RDS 入门

例如,从 VPC 中的 Amazon EC2 实例向数据库实例终端节点执行 nslookup:

nslookup myexampledb.xxxx.us-east-1.rds.amazonaws.com 
Server: xx.xx.xx.xx 
Address: xx.xx.xx.xx#53

有关更多信息,请参阅以下示例中的参考性回答:

Name: myexampledb.xxxx.us-east-1.rds.amazonaws.com 
Address: 172.31.xx.x"

检查与多可用区部署关联的的路由表

创建多可用区部署时,可以在不同的可用区中启动多个副本数据库实例,以提高应用程序的容错能力。确保与每个数据库实例关联的子网都与相同或类似的路由表相关联。否则,如果主数据库实例故障转移到备用副本,并且备用副本关联了不同的路由表,则先前路由到数据库实例的流量可能无法再正确路由。

有关如何配置路由表的更多信息,请参阅路由表。有关多可用区部署的更多信息,请参阅 Amazon RDS 的高可用性(多可用区)

注意:如果您可以连接到数据库实例,但收到身份验证错误,请参阅如何重置 Amazon RDS 数据库实例的主用户密码?

验证连接

通过运行以下命令之一验证您的连接:

telnet <RDS endpoint> <port number>
nc <RDS endpoint> <port number>

如果 telnetnc 命令成功,则网络连接已建立,并且该问题可能是由针对数据库的用户身份验证(例如用户名和密码)引起的。