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

2 分钟阅读
0

我无法连接到我的 Amazon Relational Database Service (Amazon RDS) 数据库实例。

简短描述

以下是阻止您与 Amazon RDS 数据库实例连接的最常见原因:

  • Amazon RDS 数据库实例处于非可用状态,因此它无法接受连接请求。
  • 连接数据库实例的源在您的安全组、网络访问控制列表 (ACL) 或本地防火墙中没有获得访问权限。
  • 连接数据库实例时使用了错误的 DNS 名称或端点。
  • 多可用区数据库实例进行了失效转移,而辅助数据库实例使用的子网或路由表不允许入站连接。
  • 用户身份验证不正确。

解决方法

使用以下一种或多种方法对连接问题进行故障排除。

使用自动化运行手册

使用 AWS Systems Manager Automation 文档 AWSSupport-TroubleshootConnectivityToRDS 来诊断问题。

该自动化文档可以根据 Amazon Elastic Compute Cloud (Amazon EC2) 实例的主 IP 地址诊断网络访问控制列表。但是,临时端口未经过验证。自动化文档还会根据 Amazon EC2 实例的主 IP 地址检查安全组,但该自动化不会检查特定的端口。有关详细信息,请参阅运行由 Systems Manager Automation 支持的自动化操作

有关如何运行运行手册的说明及其检查内容的详细信息,请参阅 AWSSupport-TroubleshootConnectivityToRDS

自动化完成后,查看 Outputs(输出)部分以获取详细结果。如果运行手册无法识别问题,请继续执行以下手动步骤。

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

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

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

对于连接到您的数据库实例的源,确保来自这个源的流量不会被以下一项或多项配置要求阻止:

  • 与数据库实例关联的任何 Amazon Virtual Private Cloud (Amazon VPC) 安全组。向与 VPC 关联的安全组添加规则,允许与源相关的流量进出数据库实例。您可以指定 IP 地址、IP 地址范围或其他 VPC 安全组。有关 VPC 和数据库实例的一般信息,请参阅在 VPC 中访问数据库实例的场景
  • **与数据库实例关联的任何数据库安全组。**如果数据库实例不在 VPC 中,则该实例可能使用数据库安全组来控制流量。更新您的数据库安全组,以允许来自您用于连接的 IP 地址范围或 Amazon EC2 安全组的流量。
  • **连接位于 VPC 外部。**确保数据库实例可公开访问并与公有子网关联。例如,路由表允许从互联网网关进行访问。有关详细信息,请参阅在 VPC 中访问数据库实例的场景
    对于私有子网中的数据库实例,使用 VPC 对等连接或 AWS Site-to-Site VPN 安全地连接到您的实例。通过 Site-to-Site VPN,您可以配置客户网关,允许您将 VPC 连接到远程网络。使用 VPC 对等连接在源 VPC 和实例的 VPC 之间创建对等连接,从实例的 VPC 外部访问该实例。您还可以使用 Amazon EC2 实例作为堡垒机(跳跃)主机
  • **网络 ACL。**网络 ACL 充当 VPC 的特定子网中资源的防火墙。对于 VPC 中的 ACL,请确保 ACL 包含允许进出数据库实例的入站和出站流量的规则
  • **网络或本地防火墙。**询问您的网络管理员,对于数据库实例用于入站和出站通信的端口,您的网络是否允许流量进出这些端口。
    **注意:**Amazon RDS 不接受互联网控制消息协议 (ICMP) 流量,包括 ping。

潜在的 DNS 名称或端点问题

连接到数据库实例时,您使用 Amazon RDS 控制台提供的 DNS 名称(端点)。请务必使用正确的端点。此外,请以正确的格式为用于连接到数据库实例的客户端提供端点。有关数据库引擎连接以及如何在各种客户端应用程序中使用端点的详细信息,请参阅开始使用 Amazon RDS

例如,使用 nslookup 从 VPC 中的 Amazon EC2 实例查看数据库实例端点。

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 中不存在任何资源限制,例如 CPU 或内存争用。当您与实例建立较新的连接时,内存争用可能会导致问题。
  • 该实例未达到 max_connections 限制。

检查与您的实例关联的路由表

确保与每个数据库实例关联的子网与相同或相似的路由表相关联。如果您的主数据库实例失效转移到与不同路由表关联的备用副本,则流量可能无法正确路由。即使该流量以前路由时没有出现问题,仍然可能无法再正确路由。

有关详细信息,请参阅配置路由表。有关详细信息,请参阅为 Amazon RDS 配置和管理多可用区部署

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

验证您的连接

要验证您的连接,请运行以下命令之一:

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

telnetnc 命令用于测试客户端与服务器之间的连接。如果 telnetnc 命令执行成功,则网络连接已建立。这意味着问题是由数据库对用户的身份验证(例如用户名或密码)引起的。

相关信息

无法连接到 Amazon RDS 数据库实例

对于使用 VPC 公有或私有子网连接 Amazon RDS 数据库实例的情况,如何解决与之相关的连接问题?

Amazon RDS 的安全性

使用 SSL/TLS 加密与数据库实例或集群的连接