Hallo Leute,
ich habe hier ein Datenbankproblem und komme einfach nicht weiter.
Ich habe eine Online-MySQL-Datenbank bei einem Anbieter gemietet. Diese kann von extern über einen SSH-Tunnel angesprochen werden. Dazu habe ich mir JSch ausgeguckt und teste damit nun gerade.
Dazu nutze ich folgendes Testprogramm aus dem Netz (Userdaten habe ich im echten Code natürlich korrekt eingetragen):
Das Programm gibt folgenden Fehler aus:
Die SSH-Tunnel-Verbindung funktioniert, aber die Verbindung mit dem SQL-Server nicht.
Die Fehlermeldung kommt ja vom MySQL-Server, wenn ich das richtig verstehe. Ich habe die maxAllowedPacket=148576 kleiner gestellt, als das in der Fehlermeldung angegebene max, hat aber keinen Effekt.
Was mache ich falsch?
Könnt ihr mir helfen?
Vielen Dank!
Sebix
ich habe hier ein Datenbankproblem und komme einfach nicht weiter.
Ich habe eine Online-MySQL-Datenbank bei einem Anbieter gemietet. Diese kann von extern über einen SSH-Tunnel angesprochen werden. Dazu habe ich mir JSch ausgeguckt und teste damit nun gerade.
Dazu nutze ich folgendes Testprogramm aus dem Netz (Userdaten habe ich im echten Code natürlich korrekt eingetragen):
Java:
import java.sql.DriverManager;
import java.sql.SQLException;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.sql.Connection;
public class dbtest {
/**
* Java Program to connect to remote database
* through SSH using port forwarding
* @author Pankaj@JournalDev
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
int lport=3306;
String rhost="mysql5.xy.cc";
String host="xy.cc";
int rport=22;
String user="xyzuser";
String password="xyzpw";
String dbuserName = "dbuser";
String dbpassword = "dbpw";
String url = "jdbc:mysql://localhost:"+lport+"/db?maxAllowedPacket=148576";
String driverName="com.mysql.jdbc.Driver";
Connection conn = null;
Session session= null;
try{
// Set StrictHostKeyChecking property to no
// to avoid UnknownHostKey issue
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
int assinged_port =
session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port
+" -> "+rhost+":"+rport);
System.out.println("Port Forwarded");
//mysql database connectivity
Class.forName(driverName).newInstance();
System.out.println ("Database connection established1");
conn = DriverManager.getConnection (url,
dbuserName, dbpassword);
System.out.println ("Database connection established");
System.out.println("DONE");
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn != null && !conn.isClosed()){
System.out.println("Closing Database Connection");
conn.close();
}
if(session !=null && session.isConnected()){
System.out.println("Closing SSH Connection");
session.disconnect();
}
}
}
}
Das Programm gibt folgenden Fehler aus:
Connected
localhost:3306 -> mysql5.xy.cc:22
Port Forwarded
Database connection established1
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
Closing SSH Connection
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:613)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1088)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2493)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2526)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dbtest.main(dbtest.java:53)
Die SSH-Tunnel-Verbindung funktioniert, aber die Verbindung mit dem SQL-Server nicht.
Die Fehlermeldung kommt ja vom MySQL-Server, wenn ich das richtig verstehe. Ich habe die maxAllowedPacket=148576 kleiner gestellt, als das in der Fehlermeldung angegebene max, hat aber keinen Effekt.
Was mache ich falsch?
Könnt ihr mir helfen?
Vielen Dank!
Sebix