首页 > 解决方案 > 尝试连接数据库时遇到错误 08001

问题描述

当我尝试连接到一个 PostgreSQL 数据库的实例时,我已按照位于此处 ( https://aws.amazon.com/getting-started/ ) 的 AWS“使用 Amazon RDS 创建并连接到 PostgreSQL 数据库”教程创建tutorials/create-connect-postgresql-db/),我收到一条错误消息:

[08001] 连接尝试失败。java.net.SocketTimeoutException:连接超时。

数据库设置为允许所有端口和来自所有 IP 地址的传入和传出流量。我完全不知道如何使这项工作正常进行,并已联系 AWS Support 征求他们的意见,但到目前为止,我所做的只是按照 AWS 教程规定的指示进行操作,但无济于事。

有谁知道可能是什么问题?

编辑:我应该提到我的所有主机 URL、端口号、数据库名称等都已正确输入 DataGrip,所以以上都不是问题。

标签: postgresqlamazon-web-servicesamazon-rds

解决方案


好吧——我想通了。

首先,@Mark B 是对的——问题是我还没有通过它所属的 VPC 安全组公开访问数据库本身。为此,我从 AWS 中的数据库详细信息屏幕:

  1. 单击数据库仪表板的“VPC 安全组”下方的链接(对我来说是唯一的)链接,该链接将我引导至 EC2 安全组屏幕
  2. 单击与我的数据库相关的安全组链接,该链接将我定向到该组的详细信息页面
  3. 单击“编辑入站规则”按钮,将我引导至“编辑入站规则”屏幕
  4. 单击“添加规则”按钮,这会导致包含以下列的表格行:“类型”、“协议”、“端口范围”、“源”、“描述 - 可选”
  5. 为“类型”列选择“PostgreSQL”,导致“TCP”和“5432”的值分别填充“协议”和“端口范围”列,输入我机器的IP地址(“123.456.789.012/32” -- 没有引号和括号),并将“描述 - 可选”留空,因为它是可选的。

最后,我想我忘记显式命名数据库,所以我尝试输入对我来说表面上是数据库名称(即“database-1”)的结果导致连接错误,指示“database-1”不存在。因此,为了方便和简单地验证我的数据库连接,我在我的数据库客户端(我目前使用 DataGrip)中输入了“postgres”作为数据库名称,因为“postgres”是 postgreSQL 数据库的实际名称。

这应该有效。我敢肯定,对于那些在 AWS 方面更有经验的人来说,这都是不费吹灰之力的事情,但它对我来说是新的,大概对许多其他人来说也是如此。

再次感谢@Mark B,让我走上了正确的道路。


推荐阅读