AWS:无法从我的机器连接到 RDS 数据库

Posted

技术标签:

【中文标题】AWS:无法从我的机器连接到 RDS 数据库【英文标题】:AWS: can't connect to RDS database from my machine 【发布时间】:2016-09-09 19:47:07 【问题描述】:

EC2 实例/实时网络可以很好地连接到 RDS 数据库。但是当我想在我的本地机器上调试代码时,我无法连接到数据库并得到这个错误:

OperationalError: (2003, "Can't connect to mysql server on 'aa9jliuygesv4w.c03i1 ck3o0us.us-east-1.rds.amazonaws.com' (10060)")

我已将.pem.ppk 键添加到.ssh,并且我已经配置了EB CLI。我不知道我该怎么办了。

仅供参考:该应用在 Django 中

【问题讨论】:

我猜 AWS 有一个官方支持渠道,人们可以通过该渠道获得报酬来回答像您这样的问题。无论我多么想帮助您,如果不访问您的 AWS 账户,就很难重现该问题 - 这使得问题在这里有点离题。 检查您的安全组 - 创建数据库时,您是否选择了 Publicly Accessible 为是? 【参考方案1】:

如果您已尝试上述所有答案,请尝试此... 重新创建数据库....

关于数据库创建的 AWS 提供了允许公共/私人访问访问的选项

【讨论】:

【参考方案2】:

不要忘记检查您的 *** 或防火墙是否阻止连接。

【讨论】:

【参考方案3】:

接受来自任何 IP 地址的流量

创建 RDS 实例后,我的安全组入站规则设置为特定 IP 地址。我必须编辑入站规则以允许从任何 IP 地址访问。

“安全组规则” 选择一个安全组 点击“入站规则” 点击“编辑入站规则” 在“来源”下选择下拉菜单并点击“任何地方” ::0 或 0.0.0.0/0 应该出现。 点击“保存规则”

【讨论】:

谢谢@Caleb,这对我有帮助。 我都添加了,现在可以使用了;)【参考方案4】:

即使从 ec2 实例内部,我也无法连接。

在挖掘 AWS RDS 选项后发现,ec2 实例只能连接到它们所在 VPC 中的 RDS。

在 RDS 所在的同一 VPC 中创建 ec2 实例时,我可以按预期访问它。

【讨论】:

【参考方案5】:

好吧,几乎每个人都指出了答案,我会从不同的角度来解释,以便您理解。

有两种方式可以连接到您的 AWS RDS

    您在同一个 VPC 和子网中配置一个实例。您安装了工作台,您将能够连接到数据库。您不需要将其公开访问。示例:您可以在同一个 VPC 组中配置一个 windows 实例并安装工作台,您可以通过端点连接到数据库。

    另一种方法是让您的 IP 可以公开访问 Db,以防止不必要的访问。您可以更改数据库安全组以仅允许数据库端口流量到您的 IP。这样,您的数据库将可以公开访问,但仅供您访问。这是我们在 SG 的源部分添加安全组的各种 AWS 服务的方式。

如果这两个选项都不起作用,则错误在 VPC 路由表中,您可以在那里检查它是否与子网关联,以及是否连接了 Internet 网关。

您可以观看此视频,它会消除您的疑虑:

https://youtu.be/e18NqiWeCHw

【讨论】:

【参考方案6】:

就我而言,当我升级尺寸时。 rds 实例的私有地址属于 VPC 的私有子网。您可以使用the article 我的实例位于私有子网中,我无法从本地计算机连接到它以查找您的数据库实例地址。

但是,更改路由表并没有解决我的问题。我最终解决问题的方法是降级尺寸,然后再升级尺寸。一旦私有地址回退到公共子网。一切都像魅力一样。

【讨论】:

【参考方案7】:

只花了两个小时浏览此页面上的出色解决方案。是时候给出愚蠢的答案了!

我重做了我的安全组、VPC、路由表、子网、网关……不。我从 AWS 控制台复制粘贴了 URL,在某些情况下会导致 隐藏的尾随空格。端点位于<div> 元素中,浏览器在复制时会给出\n。将其粘贴到 Intellij db 连接器中会将其强制为空格。

我只是在将 URL 粘贴到源代码中的引号字符串后才注意到问题。

【讨论】:

对于那些在列表中排名靠后的人......我必须执行此页面上发布的 3 个解决方案。 1)我必须添加@aminah 概述的入站规则,2)我必须确保按照 AnythonR 的概述设置公共可访问性,最后 3)复制文本时主机名末尾有一个空格从aws控制台...最后一个我花了一段时间才弄清楚...希望他们有一个“复制到剪贴板”按钮,就像Azure一样。【参考方案8】:

确保 PUBLIC ACCESSIBILITY 设置为是

这是我过去 3 天试图解决的问题......

Instructions to change Public Accessibility

【讨论】:

然后你可以添加一个安全组,使用你的web服务器的IP和你的开发者访问ips。 如果我这样做,人们还需要密码吗?或者任何人都可以访问? 他们仍然需要您的凭据和下载的密钥才能 ssh 进入您的数据库。 在哪里可以找到这个设置? ...这样做您可以跳过 VPC 分配(说明链接中的第一点)【参考方案9】:

确保您的 VPC 和子网足够宽。

以下 CIDR 配置适用于两个子网:

VPC 10.0.0.0/16 10.0.0.0 — 10.0.255.255 (65536 addresses)

子网 1 10.0.0.0/17 10.0.0.0 — 10.0.127.255 (32768 addresses, half)

子网 2 10.0.128.0/17 10.0.128.0 — 10.0.255.255 (32768 addresses, other half)

如果您需要三个子网,请调整它。


我无法连接到我的 RDS 数据库。我已经手动检查了所有细节,一切都很好。没有任何问题的迹象,我在文档中找不到任何合适的信息。我的 VPC 配置了窄 CIDR:10.0.0.0/22,每个子网有 255 个地址。在我将 CIDR 更改为 10.0.0.0/16 并将其完全拆分为两个子网之后,我的 RDS 连接开始工作。能找到问题的根源真是幸运,因为这对我来说没有任何意义。

【讨论】:

【参考方案10】:

事实证明这并不难。执行以下步骤:

    转到 EC2 仪表板 转到安全组选项卡 选择并仅选择 RDS 数据库安全组。您将在底部看到安全组详细信息 点击入站标签 点击编辑按钮 添加类型:MYSQL/Aurora;协议:TCP;范围:3306;来源:0.0.0.0/0

【讨论】:

将您的 MySQL 实例打开到 0.0.0.0/0(每个人?)是否存在安全风险? 这对我有用!但是你能解释一下这是否是允许外部访问 RDS 的标准方式吗? 就我而言,我只需要添加 EC2 实例的“私有 IP” @kafka 如果您在测试数据库上进行调试,那很好,否则您可能希望将 IP 范围限制为受信任的 IP(例如,您公司的 IP)。在这种情况下,你会写 X.X.X.X/32,只允许一个 IP 地址。旁注:创建数据库安全组时,Amazon RDS 向导似乎将规则设置为您的“当前 IP”。我现在意识到这一点,因为我回到家,我在办公室玩的测试数据库连接停止工作。 这对我有用。谢谢。正如@coconup 提到的,现在RDS 在您创建规则时在源代码中有“我的IP”选项。

以上是关于AWS:无法从我的机器连接到 RDS 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Python Elastic Beanstalk 中的 Flask SQLAlchemy URI 连接到 AWS MySQL RDS 实例

JPA 无法从 Beanstalk 连接到 AWS RDS,但它可以在本地工作

无法通过 AWS.RDS.Signer 连接到 RDS

无法使用 SQL Workbench 连接到 AWS RDS 数据库

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

出于开发目的,无法从本地主机连接到 AWS RDS Postgresql