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

2 分钟阅读
0

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

简短描述

无法连接到 Amazon RDS 数据库实例的根本原因有很多。以下是一些比较常见的原因:

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

**提示:**您可以使用以下故障排除步骤来确定连接问题的根源。或者,您可以使用 AWS Systems Manager Automation 文档 AWSSupport-TroubleshootConnectivityToRDS 来诊断问题。该自动化文档可以根据 Amazon Elastic Compute Cloud(Amazon EC2)实例的主 IP 地址诊断网络访问控制列表。但是,临时端口未经过验证。自动化文档还会根据 EC2 实例的主 IP 地址检查安全组,但该自动化不会检查特定的端口。有关详细信息,请参阅运行自动化

解决方法

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

如果您最近启动或重启了数据库实例,请在 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,请确保其包含允许进出数据库实例的入站和出站流量的规则
  • **网络或本地防火墙。**询问您的网络管理员,对于数据库实例用于入站和出站通信的端口,您的网络是否允许流量进出这些端口。
    注意: 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 中是否存在任何资源限制,例如 CPU 或内存争用。这种争用可能会导致与实例建立新的连接时出现问题。
  • 确保该实例未达到 max_connections 限制。

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

创建多可用区部署时,您可以在不同的可用区启动多个副本数据库实例,以提高应用程序的容错能力。确认与每个数据库实例关联的子网与相同或相似的路由表相关联。如果您的主数据库实例故障转移到与不同路由表关联的备用副本,则流量可能无法正确路由。即使该流量以前路由时没有出现问题,也可能无法再正确路由。

有关配置路由表的更多信息,请参阅配置路由表。有关多可用区部署的更多信息,请参阅多可用区部署以实现高可用性

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

验证连通性

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

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

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

相关信息

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

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

Amazon RDS 的安全性

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

AWS 官方
AWS 官方已更新 2 年前