com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler

225

Ich arbeite daran, dass meine Datenbank mit meinen Java-Programmen kommuniziert.

Kann mir jemand mit dem JDBC ein schnelles und schmutziges Beispielprogramm geben?

Ich bekomme einen ziemlich erstaunlichen Fehler:

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)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: 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)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

Inhalt der Testdatei:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}
Josh K.
quelle
17
Ich war dumm. MySQL Server wurde nicht gestartet :( Es war erfolgreich nach dem Start.
Akfaisel

Antworten:

251

Also hast du eine

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler
java.net.ConnectException: Verbindung abgelehnt

Ich zitiere aus dieser Antwort, die auch ein schrittweises MySQL + JDBC-Tutorial enthält:

Wenn Sie ein SQLException: Connection refusedoder Connection timed outoder ein MySQL-spezifisches erhalten CommunicationsException: Communications link failure, bedeutet dies, dass die Datenbank überhaupt nicht erreichbar ist. Dies kann eine oder mehrere der folgenden Ursachen haben:

  1. IP-Adresse oder Hostname in der JDBC-URL ist falsch.
  2. Der Hostname in der JDBC-URL wird vom lokalen DNS-Server nicht erkannt.
  3. Portnummer fehlt oder ist in der JDBC-URL falsch.
  4. DB-Server ist ausgefallen.
  5. Der DB-Server akzeptiert keine TCP / IP-Verbindungen.
  6. Dem DB-Server sind die Verbindungen ausgegangen.
  7. Etwas zwischen Java und DB blockiert Verbindungen, z. B. eine Firewall oder ein Proxy.

Befolgen Sie die folgenden Hinweise, um das eine oder andere Problem zu lösen:

  1. Überprüfen und testen Sie sie mit ping.
  2. Aktualisieren Sie DNS oder verwenden Sie stattdessen die IP-Adresse in der JDBC-URL.
  3. Überprüfen Sie es basierend auf my.cnfMySQL DB.
  4. Starten Sie die DB.
  5. Überprüfen Sie, ob mysqld ohne das gestartet wird --skip-networking option.
  6. Starten Sie die Datenbank neu und korrigieren Sie Ihren Code entsprechend, damit Verbindungen in geschlossen werden finally.
  7. Deaktivieren Sie die Firewall und / oder konfigurieren Sie die Firewall / den Proxy so, dass der Port zugelassen / weitergeleitet wird.

Siehe auch:

BalusC
quelle
4
MAMP / MAMP Pro setzt standardmäßig MAMP_skip-network_MAMP. Sie müssen diese Zeile in Ihrer my.cfn
Jurik
6
Nicht in diesem Fall, aber ein Kommunikationsverbindungsfehler tritt auch auf, wenn Sie einen Verbindungspool verwenden und die Verbindungen aufgrund längerer Inaktivität geschlossen werden. Nur in diesem Fall heißt es "Das letzte Paket wurde vor einigen" X "Sekunden
empfangen
@nikel Sollten die Threads im Verbindungspool nicht durch Auslösen der Validierungsabfrage "select 1" aktiv bleiben? Warum sollten sie durch längere Inaktivität geschlossen werden, wenn wir den Evictor so eingestellt haben, dass er in kürzeren Zeitintervallen als das Zeitlimit für den MySQL-Server ausgeführt wird?
Farhad
Ja, eine Validierungsabfrage würde dies beheben. Mein Punkt war über den Fall, wenn es nicht gesetzt ist und Verbindungen im Pool wegen Inaktivität eine
Zeitüberschreitung
Manchmal fehlt der Port in der Verbindungszeichenfolge und der Treiber versucht, eine Verbindung zum Standard-MySQL-Port 3306 herzustellen, und schlägt fehl, wenn MySQL an diesem Port nicht ausgeführt wird. Es war mein Problem, also sollte ich es erwähnen, falls jemand anderes es nützlich finden sollte.
Abdul Mannan
10

Ich fange diese Ausnahme ab, wenn Java keinen Heap mehr hat. Wenn ich versuche, viele Datenelemente in den Arbeitsspeicher zu stellen, erhalte ich zuerst " Kommunikationsverbindungsfehler " und dann " OutOfMemoryError ".

Ich habe es protokolliert und den Speicherverbrauch verringert (1/2 Daten löschen) und alles in Ordnung.

user1694306
quelle
9

In meinem Fall musste Localhost durch die tatsächliche IP-Adresse des Datenbankservers ersetzt werden

Anstatt

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

ich brauchte

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
sureshAngamuthu
quelle
Zum neuesten Update 05.04.18: Derzeit verwende ich MySQL Workbench 6.3. Ich bin hierher gekommen, um die Lösung zu überprüfen, habe sie aber selbst gefunden. Es ist nur so, dass Ihr MySQL-Server nicht ausgeführt wird oder gestoppt wird. Ich habe meinen Server neu gestartet, es hat wie ein Zauber funktioniert.
Abhishek Ekaanth
7
Dies ist die "beste Lösung" warum? Welches Problem löst es und wie?
Marquis von Lorne
Diese Lösung kann keine Datenrahmen generieren
Alan
8

Diese com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionAusnahme tritt auf, wenn Ihre Datenbankverbindung längere Zeit inaktiv ist.

Diese Leerlaufverbindung gibt true zurück, connection.isClosed();aber wenn wir versuchen, eine Anweisung auszuführen, wird diese Ausnahme ausgelöst, sodass ich vorschlagen werde, mit dem Datenbank-Pooling fortzufahren.

Yogesh Funde
quelle
2
Es tritt auch aus anderen Gründen auf, z. B. "Verbindung abgelehnt".
Marquis von Lorne
6

Ich habe seit Stunden das gleiche Problem. Ich benutze MAMP Server

Verwenden Sie anstelle von localhost: [Apache Port] Ihren MySQL-Port.

Unten finden Sie den Standard-MySQL-Port für den MAMP-Server.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
Abdul Rahim Mohamad
quelle
Wenn Sie Mamp vor der Installation von MySQL haben, versuchen Sie diese Methode
DAVIS BENNY 15MIS0426
5

Ich belle hier möglicherweise den falschen Baum an, aber Ihre Ausnahme scheint darauf hinzudeuten, dass Ihr MySQL-Server nicht verfügbar ist.

Ausnahme im Thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler Das letzte erfolgreich an den Server gesendete Paket war vor 0 Millisekunden. Der Treiber hat keine Pakete vom Server empfangen. beim...

Was passiert, wenn Sie es versuchen (vom Terminal)

mysql -u username -p

Sie werden aufgefordert, das mit dem Benutzernamen verknüpfte Kennwort einzugeben. Nachdem Sie das richtige Passwort eingegeben haben, stellt der MySQL-Client eine Verbindung her?

Möglicherweise müssen Sie MySQL in den Einstellungen starten, wenn nicht. Sie können es auch so einstellen, dass es beim Start ausgeführt wird.

Karl Walsh
quelle
1
Ich verwende MAMP, um meinen MySQL-Server auszuführen. Wäre das ein Problem?
Josh K
Wenn ich mich (über Sequal Pro) mit meinem verbinde, verwende localhostich den richtigen Benutzernamen / das richtige Passwort und es funktioniert einwandfrei.
Josh K
5

In meinem Fall stellte sich heraus, dass die Version von mysql-connector-javazu alt war.

In meiner Demo verwende ich irgendwie Folgendes mysql-connector-java:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Aber in der Entwicklungsumgebung verwende ich Folgendes:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Und meine MySQL-Version war 5.1.48 (ja, es ist alt, nur um die Produktversion nachzuahmen). Also habe ich den gleichen Fehler getroffen.

Da der Grund gefunden wird, wird auch die Lösung gefunden. Passen Sie die Version an!

Shellbye
quelle
4
Unwahrscheinlich. Alle diese Treiberversionen sollen abwärtskompatibel sein.
Marquis von Lorne
1
Dieses Problem scheint in neuen MySQL-Konnektoren behoben zu sein, siehe stackoverflow.com/questions/14559794/…
Nishi
Der gleiche Fall für mich. Die Treiberversion ist für MySQL 5, während die Serverversion 8 ist. Also habe ich die JAR-Version aktualisiert und das Problem gelöst.
edenPan
4

Ich habe den gleichen Fehler erhalten, weil ich versucht habe, mein Programm auszuführen, ohne den MySQL-Server zu starten.

Nach dem Start des MySQL-Servers lief alles richtig.

rs2012
quelle
4

Frühere Antworten sind angebracht. Ich möchte aber auch auf ein allgemeineres Thema hinweisen.

Ich hatte ein ähnliches Problem und der Grund war eine Netzwerkeinschränkung meines Unternehmens.

Dieselbe Verbindung wurde erfolgreich, wenn ich mich in einem anderen Netzwerk befand.

user3251882
quelle
1
Dieser Zeiger löste mein Problem und gab an, dass 'localhost' funktionierte, wenn ich eine Verbindung zu VPN herstellte, aber dasselbe funktionierte nicht, wenn ich die Verbindung zum VPN
trennte.
4

Bitte aktualisieren Sie Ihre IP-Adresse in der Datei /etc/mysql/my.cnf

bind-address  = 0.0.0.0

Starten Sie die Dienste mysql deamon und mysql neu.

Sreedhar GS
quelle
1
Bearbeitet, um eine gültige Bindungsadresse zu verwenden
OneCricketeer
3

Laden Sie MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' von 'mysql-connector-java-5.1.11.zip') unter MySQL herunter .

Sie müssen die Treiber-JAR während der Kompilierungs- und Laufzeit in Ihrem Klassenpfad einfügen.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
Stapler
quelle
Nein, gibt mir einen Sturm von Fehlern, wenn ich nichts finde. Wäre es möglich, dies ohne die JAR-Datei zu importieren?
Josh K
@Josh das funktioniert, du musst wirklich nur deinen Klassenpfad richtig einrichten. (Oder kopieren Sie die JAR in Ihr Verzeichnis% JAVA_HOME% \ jre \ lib \ ext, aber dies wird als schlechte Praxis angesehen)
Stacker
3

Dieser Fehler kann auch auftreten, wenn Java versucht, über SSL eine Verbindung zu MySQL herzustellen, aber etwas schief geht. (In meinem Fall habe ich Payara Server 5.193.1-Verbindungspools für MySQL konfiguriert.)

Einige Leute schlugen eine Einstellung vor useSSL=false. Seit der Connector / J-Version 8.0.13ist diese Einstellung jedoch veraltet. Hier ist ein Auszug aus den Konfigurationseigenschaften von MySQL Connector / J 8.0 :

sslMode

Standardmäßig sind Netzwerkverbindungen SSL-verschlüsselt. Mit dieser Eigenschaft können sichere Verbindungen deaktiviert oder eine andere Sicherheitsstufe ausgewählt werden. Folgende Werte sind zulässig: DISABLED- Unverschlüsselte Verbindungen herstellen; PREFERRED- (Standard) Verschlüsselte Verbindungen herstellen, wenn der Server sie aktiviert hat, andernfalls auf unverschlüsselte Verbindungen zurückgreifen; REQUIRED- Stellen Sie sichere Verbindungen her, wenn der Server sie aktiviert hat. Andernfalls schlagen Sie fehl. VERIFY_CA- REQUIREDÜberprüfen Sie das Server-TLS-Zertifikat, vergleichen Sie es jedoch zusätzlich mit den konfigurierten CA-Zertifikaten (Certificate Authority). VERIFY_IDENTITY- MögenVERIFY_CA , aber überprüfen Sie zusätzlich, ob das Serverzertifikat mit dem Host übereinstimmt, zu dem die Verbindung versucht wird.

Diese Eigenschaft ersetzte die veralteten Legacy-Eigenschaften useSSL, requireSSLund verifyServerCertificate, die noch akzeptiert, aber in einen Wert übersetzt werden, sslModewenn sslModenicht explizit festgelegt ist: useSSL=falsewird übersetzt in sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}wird übersetzt in sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}wird übersetzt in sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}wird übersetzt in sslMode=VERIFY_CA. Es gibt keine entsprechenden Legacy-Einstellungen für sslMode=VERIFY_IDENTITY. Beachten Sie, dass für ALLE Serverversionen die Standardeinstellung von sslModeist PREFERREDund den Legacy-Einstellungen von entspricht , die sich in einigen Situationen von den Standardeinstellungen für Connector / J 8.0.12 und früher unterscheiden. Anwendungen, die weiterhin die alten Eigenschaften verwenden und sich auf ihre alten Standardeinstellungen stützen, sollten überprüft werden.useSSL=true , requireSSL=falseundverifyServerCertificate=false

Die Legacy-Eigenschaften werden ignoriert, wenn sie sslModeexplizit festgelegt sind. Wenn keines von sslModeoder useSSLexplizit festgelegt ist, gilt die Standardeinstellung von sslMode=PREFERRED.

Standard :PREFERRED

Seit Version : 8.0.13

In meinem Fall war die Einstellung sslMode=DISABLEDalles, was ich brauchte, um das Problem zu beheben. Dies war auf einer Testmaschine. Für die Produktion wäre die sichere Lösung jedoch, den Java-Client und den MySQL-Server ordnungsgemäß für die Verwendung von SSL zu konfigurieren.


Beachten Sie, dass Sie durch Deaktivieren von SSL möglicherweise auch festlegen müssen allowPublicKeyRetrieval=true. (Auch hier keine kluge Entscheidung aus Sicherheitsgründen). Weitere Informationen finden Sie in den MySQL ConnectionString-Optionen :

AllowPublicKeyRetrieval

Wenn das Benutzerkonto die sha256_passwordAuthentifizierung verwendet, muss das Kennwort während der Übertragung geschützt werden. TLS ist der bevorzugte Mechanismus hierfür. Wenn es jedoch nicht verfügbar ist, wird die Verschlüsselung mit öffentlichem RSA-Schlüssel verwendet. Um den öffentlichen RSA-Schlüssel des Servers anzugeben, verwenden Sie die ServerRSAPublicKeyFileEinstellung für die Verbindungszeichenfolge oder legen Sie fest AllowPublicKeyRetrieval=True, dass der Client den öffentlichen Schlüssel automatisch vom Server anfordern kann. Beachten Sie, AllowPublicKeyRetrieval=Truedass ein böswilliger Proxy möglicherweise einen MITM-Angriff ausführen kann, um das Klartextkennwort abzurufen. Daher ist es standardmäßig falsch und muss explizit aktiviert werden.

MS Dousti
quelle
Relevanter Thread von Payara Server GitHub .
MS Dousti
3

Mein gleiches Problem wird durch die folgenden Schritte gelöst:

  1. Gehe zu my.cnf

    vi /etc/mysql/my.cnf
  2. Ändern Sie die Bindungsadresse

    "bind-address = 0.0.0.0"
  3. Starten Sie MySQL neu

    sudo /etc/init.d/mysql restart
Haimei
quelle
2

Wenn Sie mit WAMPoder XAMPServer MySQL - Datenbank zu installieren. Dann müssen Sie MySQL explizit starten, andernfalls wird es angezeigt, com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failurewährend Sie sich mit der Datenbank verbinden

xrcwrn
quelle
2

Ich habe dieses Problem auf einfache Weise gelöst, das hat bei mir funktioniert. Ich hatte das Seme-Problem "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler". In meiner Datei db.properties hatte ich Folgendes: url: jdbc: mysql: // localhost: 90 / myDB, entfernte nur die Port-URL, was auf diese Weise zu url: jdbc: mysql: // localhost / myDB führte, und das funktionierte für mich .

Dario Castro
quelle
2

Das ist mir passiert, als ich den MySQL-Port in den Dateien my.ini und php.ini von 3306 auf 3307 geändert habe, aber nachdem ich die Ports (3307-> 3306) wieder geändert habe, hat es wieder gut funktioniert.

MrPencil
quelle
2

Wenn Sie Ihren Port geändert haben, wird die Fehlermeldung "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler" angezeigt. Überprüfen Sie Ihre Portnummer

Maheshkumar.V
quelle
1

Habe das gerade erlebt.

Ich muss dafür sorgen, dass es funktioniert durch: (Dies kann im statischen Block-Intializer platziert werden.)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Auch durch Erhalten der Verbindung durch:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

anstatt die Anmeldeparameter anzugeben

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Grüße.

mel3kings
quelle
2
Der statische Block ist seit 2007 nicht mehr erforderlich, und Sie können die Anmeldeparameter in beiden Fällen angeben.
Marquis von Lorne
1

Versuchen Sie , ändern localhostzu 127.0.0.1.

Der localhost wäre dazu entschlossen ::1. Und MySQL kann standardmäßig nicht über IPv6 verbunden werden.

Und hier ist die Ausgabe von telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Und es gibt keine Antwort vom MySQL-Server.

Stellen Sie natürlich sicher, dass Ihr MySQL-Server ausgeführt wird.

Haozhe Xie
quelle
Das ist eigentlich ein Problem mit Ihrer / etc / hosts-Datei, nicht Mysql
OneCricketeer
@ Cricket_007 Standardmäßig wird localhost in :: 1 anstelle von 127.0.0.1 aufgelöst.
Haozhe Xie
1
Sicher, nur wenn IPv6 aktiviert ist und abhängig von der Hosts-Datei
OneCricketeer
1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

Wenn MySQL Version 8 oder höher Benutzer aktualisiert Connector

Ravinath
quelle
Dies ist die richtige Antwort. Fügen Sie einfach useSSL = false zur Verbindungszeichenfolge hinzu, wenn Sie den MySQL-Treiber 8 oder höher verwenden.
Mohannd
1

Für Remote - Anruf zu Mysql

  1. Fügen Sie einen Remote-Benutzer zu MySQL hinzu, z. B. IP = remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. Allow Remote - Zugriff auf Mysql (standardmäßig alle externall Anruf nicht erlaubt ist):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. Für die neueste Version des JDBC-Treibers, den JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
Yugerten
quelle
0

Ich hatte das gleiche Problem und hier ist, wie es behoben wurde:

  1. Meine .jsp rief Attribute auf, die ich noch nicht im Servlet definiert hatte.
  2. Ich hatte zwei Spaltennamen, die ich an ein Objekt weitergab ResultSet (getString("columnName")), die nicht mit den Spaltennamen in meiner Datenbank übereinstimmten.

Ich bin mir nicht ganz sicher, welches das Problem behoben hat, aber es hat funktioniert. Auch sicher sein , dass Sie eine neue erstellen Statementund ResultSetfür jede Tabelle Abfrage.

user3427633
quelle
1
(1) verursacht dieses Problem sicherlich nicht.
Marquis von Lorne
0

Es könnte ein einfaches Glasproblem sein. Möglicherweise verwenden Sie eine alte mysql-connector-java-XXX-bin.jarVersion, die von Ihrer aktuellen MySQL-Version nicht unterstützt wird. Ich habe verwendet, mysql-connector-java-5.1.18-bin.jarwie ich benutze mysql 5.5und dieses Problem ist für mich gelöst.

Ankit Jain
quelle
1
Ja, es besteht die Möglichkeit einer Nichtübereinstimmung des Glases.
Kiran Nunna
Alle diese Treiberversionen sollen kompatibel sein.
Marquis von Lorne
0

Möglicherweise haben Sie MySQL und Apache Server nicht gestartet. Nachdem ich Apache Server und MySQL über die XAMPP-Systemsteuerung gestartet hatte, wurde die Verbindung erfolgreich hergestellt.

Viel Glück!

Shivam Gupta
quelle
0

Was für mich gelöst wurde, ist zwei Dinge zu tun: 1. Erstellen Sie einen neuen Benutzer außer root mit einem Passwort unter Verwendung der folgenden Konnads:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. Kommentar IP-Adresszeile auf mysqld.conf

Verbinden Sie sich dann mit einem neuen Benutzernamen und Passwort. es sollte funktionieren.

Abdul Khalid
quelle
Sie müssen dies für alle
Remotebenutzer
0

Es wurde versucht, eine Verbindung zu einer älteren Version von MySQL herzustellen ('version', '5.1.73'). Wenn Sie eine neuere Treiberversion verwenden , wird eine Fehlermeldung angezeigt , die Sie auffordert, den "com.mysql.cj.jdbc.Driver" zu verwenden, oder sogar, dass Sie nicht angeben müssen, welche Sie verwenden:

Belastungsklasse com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver‘. Der Treiber wird automatisch über das SPI registriert und das manuelle Laden der Treiberklasse ist in der Regel nicht erforderlich.

Ich habe die Deklaration geändert, um die Version 5.1.38 des mysql-connector-java zu verwenden, und im Code habe ich den com.mysql.jdbc.Driver beibehalten .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Alles begann, als ich die Antwort des Ankit Jain sah

estellezg
quelle
0

Meine Firewall blockierte Post 3307, die mein MySQL abhörte. Also habe ich den Port von 3307 auf 3306 geändert. Dann kann ich erfolgreich eine Verbindung zu einer Datenbank herstellen.

Michal Šípek
quelle
0

In meinem MacBook habe ich diesen Fehler nur behoben, wenn ich die neue Version von Eclipse EE neu installiere und lokale Server wie xamp mysql oder mamp entferne, aber nur einen davon verwende ...

m Piroli
quelle
0

In meinem Fall musste ich einen SSH-Tunnel zur entfernten Datenbank einrichten und alle Einstellungen waren korrekt und das Testen der Verbindung mit PhpStorm war ebenfalls erfolgreich. Und auch das Schema wurde geladen, aber nicht die Daten. Stattdessen bekam ich:

[08S01] 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.

Keiner der oben genannten Vorschläge hat funktioniert. Aus irgendeinem Grund habe ich versucht, das Problem zu lösen, indem ich einfach PhpStorm neu gestartet habe und voila es hat funktioniert!

Tech Nomad
quelle
0

Ich habe mehrere Fehler erhalten, wie zum Beispiel:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at.

Ich musste hinzufügen:

  • In AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/>direkt nach dem öffnenden Manifest-Tag einschließen .

  • Fügen Sie den JDBC-Treiber zu Ihren Gradle- (oder Maven-) Abhängigkeiten hinzu.

Daniel Segura
quelle