通过远程服务器将amazon mysql与JDBC连接起来

时间:2016-02-24 07:26:32

标签: java mysql amazon-web-services jdbc jsch

我在这里遇到了问题,JDBC是否有可能远程连接到亚马逊MySQL服务器?我在互联网上搜索解决方案但最终收到错误

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

我正在使用jsch.jar连接远程服务器,然后调用JDBC连接器尝试连接MySQL DB,我已成功连接到远程服务器但我无法连接amazon上的MySQL数据库,这是我的代码

testPutty t = new testPutty();
        t.connect("admin", "", "xx:xx:xx:xx", "openSSHPrivateKey", 22);
        t.connect();
        System.out.println("connected");
        Class.forName("com.mysql.jdbc.Driver");
        DriverManager.getConnection("jdbc:mysql://staging.ppyhcsxnlkji.ap-southwest-1.rds.amazonaws.com:3306/staging","superuser","password");
        System.out.println("hello world");
        t.close();

1 个答案:

答案 0 :(得分:1)

首先使用SSH建立隧道。你没有显示testPutty是什么,所以我认为它是一个围绕Putty命令行调用的瘦Java包装器。用于设置隧道的命令行选项是

-L[localport]:[host]:[remoteport]

对于你的例子,这将是

-L3306:staging.ppyhcsxnlkji.ap-southwest-1.rds.amazonaws.com:3306

这将设置一个隧道,将端口3306上的本地端口3306的连接转发到给定主机(staging...amazonaws.com)上的端口3306,并通过作为SSH命令目标的主机进行路由(在您的示例中{ {1}})。

然后,您的连接字符串需要使用xx:xx:xx:xx而不是实际的遥控器:

localhost

如果您的本地主机上的3306不可用,因为您还在运行MySQL的本地副本,请选择其他未使用的端口。