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,但它可以在本地工作
无法使用 SQL Workbench 连接到 AWS RDS 数据库