我需要通过ssh连接连接到Mysql RDS DB,我试过的是打开一个ssh隧道,然后连接到那个数据库,但它没有用。
以下是我的代码:
int lport = 3306;
String host = "10.254.64.135";
String rhost = "localhost";
int rport = 8000;
String user = "ubuntu";
String dbuserName = "someusername";
String dbpassword = "somepassword";
String dburl = "jdbc:mysql://somedbhost.us-east-1.rds.amazonaws.com:3306";
String driverName = "com.mysql.jdbc.Driver";
String driverName2 = "org.gjt.mm.mysql.Driver";
Session session = null;
try {
final java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
final JSch jsch = new JSch();
session = jsch.getSession(user, host, 22);
jsch.addIdentity("C:\\Users\\rop\\workspace\\awskey.pem");
session.setConfig(config);
session.connect();
System.out.println("Connected through SSH");
final int assinged_port = session.setPortForwardingL(rport, host,lport );
System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport);
System.out.println("Port Forwarded");
//mysql database connectivity
Class.forName("com.mysql.jdbc.Driver").newInstance();
//String url = "jdbc:mysql://localhost:" + rport + "/" + db;
con = DriverManager.getConnection(dburl, dbuserName, dbpassword);
System.out.println("Mysql Database connection established");
System.out.println("DONE");
以上代码崩溃时出现以下异常,并在此行中崩溃" con = DriverManager.getConnection(dburl,dbuserName,dbpassword);":
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障最后一个数据包成功发送到 服务器是0毫秒前。驱动程序没有收到任何数据包 来自服务器。
意思是当我们从mysql工作台连接时,它确实正常连接,在快照下面:
请注意,ssh host ip与db host ip
不同感谢。
答案 0 :(得分:1)
您需要使用localhost
替换JDBC网址中的主机名和端口以及您要转发的本地端口,您调用rport
:
dburl = "jdbc:mysql://localhost:" + rport;
此外,我不确定MySQL JDBC驱动程序是否支持连接到数据库服务器而不指定数据库名称:
dburl = "jdbc:mysql://localhost:" + rport + "/yourdatabasename";
此外,如果MySQL服务器未在与SSH服务器相同的计算机上运行,请确保您可以从SSH服务器连接到数据库服务器。 MySQL默认情况下不允许远程连接。