2015-05-20 15 views
5

erhalte ich die Fehler "Communications link failure" bei dieser Codezeile:Kann nicht auf MySQL-Server von Java verbinden

mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:3306/db-name", "mu-user-name", "my-password"); 

ich alles in this post geprüft:

  • I erhöht max-allowed-Paket in meinem. CNF in etc/mysql: max_allowed_packet = 5073741824 ------ [mysqldump] max_allowed_packet = 1G
  • die bIND-Adresse ist: 127.0.0.1
  • Alle Zeitüberschreitungswerte ist gleich eine Anzahl
  • Tomcat noch nicht auf dem Server (neuer Server)
  • Es gibt keine Skip-Vernetzung in my.cnf
  • Ich kann ping den Server
  • Ich bin mit der MySQL-Datenbank installiert ist via ssh

Wenn ich die Abfrage-String um dies zu ändern:

mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:22/127.0.0.1:3306/db-name", "mu-user-name", "my-password"); 

erhalte ich die Fehler Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.

Während ich die Paketgröße auf my.cnf geändert und danach den mysql-Dienst neu gestartet habe.

Irgendwelche Vorschläge?

HINWEIS:

ich durch ssh mit diesem Code eine Verbindung herstellen können, aber auf diese Weise rational scheint nicht! Ich kann einmal in main verbinden und dann sollte ich die Verbindung zu allen Klassen bestehen.

public my-class-constructor() { 

     try { 
      go(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     mySqlCon = null; 
     String driver = "com.mysql.jdbc.Driver"; 
     String url = "jdbc:mysql://" + rhost + ":" + lport + "/"; 
     String db = "my-db-name"; 
     String dbUser = "dbuser"; 
     String dbPasswd = "pass"; 
     try { 
      Class.forName(driver); 
      mySqlCon = DriverManager.getConnection(url + db, dbUser, dbPasswd); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void go() { 
     String user = "ssh-user"; 
     String password = "ssh-pass"; 
     String host = "ips-address"; 
     int port = 22; 
     try { 
      JSch jsch = new JSch(); 
      Session session = jsch.getSession(user, host, port); 
      lport = 4321; 
      rhost = "localhost"; 
      rport = 3306; 
      session.setPassword(password); 
      session.setConfig("StrictHostKeyChecking", "no"); 
      System.out.println("Establishing Connection..."); 
      session.connect(); 
      int assinged_port = session.setPortForwardingL(lport, rhost, rport); 
      System.out.println("localhost:" + assinged_port + " -> " + rhost 
        + ":" + rport); 
     } catch (Exception e) { 
      System.err.print(e); 
      e.printStackTrace(); 
     } 
    } 
+3

Können Sie den Server anpingen? –

+0

es scheint, dass Ihre Abfrage zu groß ist, versuchen Sie eine kleinere Abfrage z. "Wählen Sie * aus dem Tabellenlimit 10;" – nafas

+0

Wenn die MySQL-Datenbank remote ist, haben Sie die Berechtigungen korrekt konfiguriert? – John

Antwort

0

ich die Bindung Adresse in my.cnf geändert in/etc/mysql, um die IP-Adresse des der Server, und es löste das Problem.

+1

gut zu hören, dass Sie damit fertig sind, danke für das Update –

+0

Vielen Dank für Ihre Hilfe :) – Andi

3

Werfen Sie einen Blick here. Mit dem folgenden beschreibt Ihr Fall

Das größtmögliche Paket, das zu oder von einem MySQL 5.7 Server oder Client ist 1 GB übertragen werden kann.

Wenn ein MySQL Client oder der Server ein Paket mysqld größer als max_allowed_packet Bytes empfängt, gibt sie einen Fehler ER_NET_PACKET_TOO_LARGE und schließt die Verbindung. Bei einigen Clients erhalten Sie möglicherweise auch eine verlorene -Verbindung zum MySQL-Server während eines Abfragefehlers, wenn das Paket zu groß ist.

Sowohl der Client als auch der Server haben ihre eigene Variable max_allowed_packet . Wenn Sie also große Pakete verarbeiten möchten, müssen Sie diese Variable sowohl im Client als auch auf dem Server erhöhen.

So sieht es aus wie Sie die max_allowed_packet als auch auf dem Client ändern müssen:

mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:3306/db-name?max_allowed_packet= 5073741824", "mu-user-name", "my-password"); 
+0

Es hat das Problem nicht gelöst. – Andi

+0

Können Sie es auch mit einer SSH-Verbindung versuchen? –

+0

Wie meinst du das? – Andi

Verwandte Themen