我在这里遇到了问题,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();
答案 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的本地副本,请选择其他未使用的端口。