如何解决连接到 Amazon RDS 数据库实例时出现的问题?
我无法连接到我的 Amazon Relational Database Service (Amazon RDS) 数据库实例。
简短描述
无法连接到 Amazon RDS DB 实例的根本原因有很多。以下是几种较为常见的原因:
- RDS 数据库实例未处于可用状态,因此无法接受连接。
- 您的连接数据库实例的源在您的安全组、网络访问控制列表(ACL)或本地防火墙中没有授权访问权限。
- 用于连接到数据库实例的 DNS 名称或端点错误。
- 多可用区数据库实例进行了故障转移,辅助数据库实例使用不允许入站连接的子网或路由表。
- 由于以下原因之一,用户身份验证不正确:
- 您在数据库级别使用了错误的用户名或密码从数据库客户端访问实例。
- 您没有访问实例所需的数据库权限。
- 客户端运行的版本与数据库版本不兼容。
**提示:**您可以使用以下问题排查步骤来确定出现连接问题的源头。或者,您可以使用 AWSSupport-TroubleshootConnectivityToRDS AWS Systems Manager Automation 文档来诊断问题。此自动化文档可根据于 Amazon Elastic Compute Cloud(Amazon EC2)实例的主 IP 地址诊断网络 ACL。但是,临时端口未经过验证。该自动化文档还会根据 EC2 实例的主 IP 地址检查安全组,但自动化不会检查特定端口。有关更多信息,请参阅运行自动化。
解决方法
请确保您的数据库实例处于可用状态
如果您最近启动或重启了数据库实例,请确认该数据库实例在 Amazon RDS 控制台中处于 available(可用)状态。根据数据库实例的大小,最长可能需要 20 分钟,数据库实例才可用于网络连接。
如果您的数据库实例处于 failed(故障)状态,请参阅为什么我的 Amazon RDS 数据库实例处于故障状态?
请确保您的数据库实例允许连接
确保来自连接到数据库实例的源的流量未通过以下一项或多项措施进行门控:
- 与数据库实例关联的任何 Amazon Virtual Private Cloud (Amazon VPC) 安全组。 如有必要,请将规则添加到与 VPC 关联的安全组,以允许与源相关的流量进出数据库实例。您可以指定 IP 地址、IP 地址范围或其他 VPC 安全组。有关 VPC 和数据库实例的一般信息,请参阅在 VPC 中访问数据库实例的方案。
- 任何与该数据库实例关联的数据库安全组。 如果数据库实例不在 VPC 中,则该实例可能正在使用数据库安全组对流量进行门控。更新您的 DB 安全组,以允许来自您用来连接的 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>
如果 telnet 或 nc 命令成功,则已建立了网络连接。这意味着问题很可能由用户对数据库的身份验证(例如用户名和密码)引起。
相关信息
相关内容
- 已提问 10 个月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前