繁体   English   中英

通过ssh连接mysql数据库(java)

[英]Connect to mysql DB through ssh (java)

我需要通过 ssh 连接连接到 Mysql RDS 数据库,我尝试过的是打开一个 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: Communications link failure 最后一个数据包成功发送到服务器是 0 毫秒前。 驱动程序没有收到来自服务器的任何数据包。

意思是当我们从 mysql 工作台连接时,它确实连接正常,在快照下方:

在此处输入图片说明

请注意,ssh 主机 ip 与 db 主机 ip 不同

谢谢。

您需要将 JDBC url 中的主机名和端口替换为localhost和您从中转发的本地端口,您称之为rport

dburl = "jdbc:mysql://localhost:" + rport;

另外,我不确定 MySQL JDBC 驱动程序是否支持在不指定数据库名称的情况下连接到数据库服务器:

dburl = "jdbc:mysql://localhost:" + rport + "/yourdatabasename";

此外,如果 MySQL 服务器与 SSH 服务器不在同一台机器上运行,请确保您可以从 SSH 服务器连接到数据库服务器。 MySQL 默认不允许远程连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM