Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mysql隧道通信错误_Java_Mysql_Jsch_Portforwarding_Ssh Tunnel - Fatal编程技术网

Java Mysql隧道通信错误

Java Mysql隧道通信错误,java,mysql,jsch,portforwarding,ssh-tunnel,Java,Mysql,Jsch,Portforwarding,Ssh Tunnel,我正在尝试使用JSch连接到远程服务器,连接似乎正常,只是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 fro

我正在尝试使用
JSch
连接到远程服务器,连接似乎正常,只是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.
我已经检查了连接字符串,它似乎是正确的,但是为什么mysql没有连接呢?它可以很好地连接到使用用户名/密码的其他数据库,但当我添加SSH隧道时,它会抛出上述错误

这是前进的方向:

lport: 3308, rhost: 127.0.0.1, rport: 3306
以下是我的连接字符串的输出:

jdbc:mysql://127.0.0.1:3308/?zeroDateTimeBehavior=convertToNull
以下是我的联系方式:

// MySQL Connection Strings
ResultSet info = sql.getConnectionInfo(connectionName);
String host = info.getString("host");
String user = info.getString("user");
String pass = info.getString("pass");
String port = info.getString("port");

// SSH Connection String
ResultSet sshInfo = sql.getSSHSettings(connectionName);
if(sshInfo.next()){
    String sshHost = sshInfo.getString("sshHost");
    String sshPort = sshInfo.getString("sshPort");
    String sshLPort = sshInfo.getString("sshLPort");
    String sshUser = sshInfo.getString("sshUser");
    String sshPass = sshInfo.getString("sshPass");
    String sshPPK = sshInfo.getString("sshPrivateKey");
    JSch ssh = new JSch();
    try{
        if(!sshPPK.equals("")){
            ssh.addIdentity(sshPPK);
        }
        Session session = ssh.getSession(sshUser, sshHost, Integer.parseInt(sshPort));
        session.setPassword(sshPass);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        session.setTimeout(4);
        String rhost = "127.0.0.1";
        int assignedPort = session.setPortForwardingL(Integer.parseInt(sshLPort), rhost, Integer.parseInt(port));
        System.out.println(rhost + ":" + assignedPort + " -> " + sshHost + ":" + port);
        // Set MySQL port to the tunnel port and the host to localhost
        host = rhost;
        port = String.valueOf(assignedPort);
    }catch(JSchException ex){
        Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
    }
}
MysqlWrapper mysqlConn = new MysqlWrapper(host, user, pass, port);
下面是我如何连接MySQL的:

public void connect(){
    try{
        if(conn != null){
            return;
        }
        System.out.println(url);
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(url, user, password);
    }catch(SQLException | ClassNotFoundException ex){
        Logger.getLogger(Mysql.class.getName()).log(Level.SEVERE, null, ex);
    }
}

,我可以使用具有相同凭据的其他应用程序连接到相同的服务器/数据库。我明白了!这是因为我有一个
setTimeout
。。。