java - 通过 SSH 连接位于防火墙后面的远程数据库

标签 java mysql ssh mysql-workbench

我正在尝试编写一些从我的个人计算机连接到远程数据库的 Java 代码。我目前可以使用私钥/公钥授权 ssh 到这些机器。我可以通过创建 SSH 隧道(使用 Putty)来访问这些机器的 GUI。

我不认为问题出在我的代码上,因为我可以使用 MySQL Workbench 创建数据库并可以成功查询数据库。当尝试访问数据库时,我使用与 GUI 相同的隧道地址。所以我的问题是我应该如何连接到数据库?有人能解答我的问题吗?我的代码发布在下面。

import  java.sql.Connection;        
import  java.sql.Statement;     
import  java.sql.ResultSet;     
import  java.sql.DriverManager;     
import  java.sql.SQLException;      
public class  SQLConnector {                
        public static void  main(String[] args) throws  ClassNotFoundException, SQLException {                                                  
                //Connection URL Syntax: "jdbc:mysql://ipaddress:portnumber/db_name"        
                String dbUrl = "jdbc:mysql://localhost:9092/db";                   

                //Database Username     
                String username = "root";   

                //Database Password     
                String password = "root";             

                //Query to Execute      
                String query = "select *  from employee;";  

                //Load mysql jdbc driver        
                Class.forName("com.mysql.jdbc.Driver");         

                //Create Connection to DB       
                Connection con = DriverManager.getConnection(dbUrl,username,password);

                //Create Statement Object       
               Statement stmt = con.createStatement();                  

                // Execute the SQL Query. Store results in ResultSet        
                ResultSet rs= stmt.executeQuery(query);                         

                // While Loop to iterate through all data and print results     
                while (rs.next()){
                            String myName = rs.getString(1);                                        
                            String myAge = rs.getString(2);                                                
                            System. out.println(myName+"  "+myAge);     
                    }       
                 // closing DB Connection       
                con.close();            
        }
} 

我得到的错误是:

Exception in thread "main" 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

最佳答案

这可能应该是一条评论,但我的声誉不允许发表评论。我大胆猜测服务器网络上的端口正在阻止该端口(无论您使用什么端口),但允许 ssh。这台服务器是什么/在哪里/您可以更改防火墙上的设置以允许连接吗?

关于java - 通过 SSH 连接位于防火墙后面的远程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37287100/

相关文章:

java - 如何动态更改警报文本?

java - 在后台使用 JSch 运行程序

Java - 当不需要写入文件时 - 我应该使用输入流还是输出流?

mysql - 简化嵌套的 CASE 表达式

macos - OSX 相当于 WinSCP 的全自动本地-远程 SFTP 同步?

java - 从文件中取出然后对整数求和但得到 0 作为答案

mysql - 无法创建与数据库的连接 (ColdFusion)

MYSQL:如果具有 OR 条件和 REGEXP 匹配

amazon-web-services - 我失去了从主服务器到从服务器(AWS EC2 Hadoop)的 ssh 连接能力

ssh - 如何在 Sublime Text 3 中打开远程文件