Eclipse 上的 AWS RDS

AWS RDS on Eclipse

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

问题:

我是 运行 数据库的 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 的网络配置。

什么都没发生!

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

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

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

准备

Refer to this Whosebug answer。忽略 plink.exe 部分,除非它适合你。

在 Putty 中,创建一个将 localhost:3306 转发到 abc.def.rds.amazonaws.com:3306 的连接。在链接答案的 "putty configuration" 图形中,您的源端口是 3306,您的目的地是 "abc.def.rds.amazonaws.com:3306"。

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

打开连接。您应该有一个空白终端 window。你可以不管它,或者你可以使用像 watch -n15 date 这样的通用命令来保持连接打开。

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

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