【问题标题】:AWS RDS on EclipseEclipse 上的 AWS RDS
【发布时间】:2017-07-12 03:50:15
【问题描述】:

我知道这个问题似乎是重复的,但事实并非如此,我已经尝试了所有我能找到的解决方案

问题:

我正在为数据库运行 AWS RDS 实例。当我使用 AWS EC2 实例(使用 linux)连接到它时它工作正常,但是当我用我的笔记本电脑尝试它时,它不起作用。我想在 Eclipse 上工作(现在我在笔记本电脑上编写代码并在 EC2 实例上对其进行测试,这非常烦人且非常不方便)。这是错误。

    com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection timed out: connect

STACKTRACE:

java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at execs.Connect.main(Connect.java:13)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.
Conn is null.
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at execs.Connect.main(Connect.java:13)

我已经尝试过:

  1. 我检查了 RDS 的安全组,它设置为接受端口 3306 (0.0.0.0/0) 的所有入站流量和所有出站流量。
  2. 我已在 Windows(笔记本电脑)防火墙上启用了来自 Eclipse 的所有出站和入站流量。
  3. 尝试完全禁用防火墙。
  4. 尝试检查 eclipse 的网络配置。

什么都没有发生!

【问题讨论】:

  • 您对数据库的“可公开访问”的设置是什么?这是在(默认)VPC 中吗?
  • 非常感谢@tedder42。它没有,但我该如何改变它
  • 我完全同意你的看法,这就是现在的设置。我知道这是一个糟糕的主意,但我正在学习和练习,我希望设置方便,以便我可以从 eclipse 中使用它。我想我必须使用以前的快照创建另一个实例。
  • 您可以在 Eclipse 中通过 ssh 隧道使用它。您只需告诉 Eclipse 数据库位于 localhost:3306 并启动隧道。
  • @tedder42 请您详细说明一下。我是新手。它仍然不起作用我创建了另一个具有公共可访问性的实例,并且我得到了同样的错误。

标签: eclipse amazon-web-services amazon-ec2 amazon-rds


【解决方案1】:

好的,根据问题上的 cmets,我将给出一个解决问题的答案。换句话说,直截了当的答案是做一件不安全的事情(公开数据库)。

这是答案中的 TLDR:创建一个通向 ec2 实例的隧道,然后告诉 Eclipse 打开你这边的隧道。

这是更长的版本,假设您有一个 ec2 实例可以访问数据库(我们将此实例称为 ec2instance.amazonaws.com),您在 Windows 上,并且您已经知道ssh 是如何工作的。最后,我们将调用数据库 DNS abc.def.rds.amazonaws.com

准备

Refer to this stackoverflow answer。忽略plink.exe 部分,除非它对您很有效。

在 Putty 中,创建一个将 localhost:3306 转发到 abc.def.rds.amazonaws.com:3306 的连接。在链接答案的“腻子配置”图形中,您的源端口是 3306,您的目标是“abc.def.rds.amazonaws.com:3306”。

在 putty 的主会话屏幕上,将主机名设置为 yourusername@ec2instance.amazonaws.com。您现在可以点击save并保存此会话(例如“db tunnel”)。

打开连接。您应该有一个空白的终端窗口。您可以不理会它,也可以使用像watch -n15 date 这样的通用命令来保持连接打开。

现在,在 Eclipse 中,将连接字符串设置为 localhost:3306。使用您在 RDS mysql 数据库上配置的任何用户名/密码。

如果您失去网络连接,ssh 隧道将会中断。您已经保存了 putty 配置,因此您可以再次登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2022-01-21
    • 2020-08-12
    • 1970-01-01
    • 2018-03-09
    • 2022-11-17
    • 2020-03-04
    相关资源
    最近更新 更多