Ich hatte in zwei meiner Programme das gleiche Problem. Mein Fehler war:
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.
Ich verbringe einige Tage damit, dieses Problem zu lösen. Ich habe viele Ansätze getestet, die auf verschiedenen Websites erwähnt wurden, von denen jedoch keiner funktioniert hat. Schließlich habe ich meinen Code geändert und herausgefunden, wo das Problem liegt. Ich werde versuchen, Sie über verschiedene Ansätze zu informieren und sie hier zusammenzufassen .
Während ich im Internet nach einer Lösung für diesen Fehler gesucht habe, habe ich herausgefunden, dass es viele Lösungen gibt, die für mindestens eine Person funktionieren, aber andere sagen, dass dies für sie nicht funktioniert! Warum gibt es viele Ansätze für diesen Fehler?
Es scheint, dass dieser Fehler im Allgemeinen auftreten kann, wenn beim Herstellen einer Verbindung zum Server ein Problem auftritt . Möglicherweise liegt das Problem an der falschen Abfragezeichenfolge oder an zu vielen Verbindungen zur Datenbank.
Deshalb empfehle ich Ihnen, alle Lösungen einzeln auszuprobieren und nicht aufzugeben!
Hier sind die Lösungen, die ich im Internet gefunden habe, und für jede von ihnen gibt es mindestens eine Person, die sein Problem mit dieser Lösung gelöst hat.
point: Für die Lösungen, die Sie zum Ändern der MySQL-Einstellungen benötigen, können Sie sich auf Folgendes nicht beziehen:
Hier sind die Lösungen:
- Ändern des Attributs "Bindeadresse"
Dekommentieren Sie das Attribut "Bindeadresse" oder ändern Sie es in eines der folgenden IPS:
Bindeadresse = "127.0.0.1"
oder
Bindeadresse = "0.0.0.0"
- "skip-networking" auskommentieren
Wenn sich in Ihrer MySQL-Konfigurationsdatei eine Zeile zum Überspringen von Netzwerken befindet, kommentieren Sie diese, indem Sie am Anfang dieser Zeile ein "#" - Zeichen einfügen.
- ändere "wait_timeout" und "interactive_timeout"
Fügen Sie diese Zeilen zur MySQL-Konfigurationsdatei hinzu:
wait_timeout = number
interactive_timeout = number
connect_timeout = number
- Überprüfen Sie die Proxy-Einstellungen des Betriebssystems
Stellen Sie sicher, dass die Firewall oder die Anti-Virus-Software den MySQL-Dienst nicht blockieren.
- Verbindungszeichenfolge ändern
Überprüfen Sie Ihre Abfragezeichenfolge. Ihre Verbindungszeichenfolge sollte etwa so aussehen:
dbName = "my_database";
dbUserName = "root";
dbPassword = "";
String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
Stellen Sie sicher, dass Ihre Zeichenfolge keine Leerzeichen enthält. Die gesamte Verbindungszeichenfolge sollte ohne Leerzeichen fortgesetzt werden.
Versuchen Sie, "localhost" durch Ihren Port zu ersetzen, z. B. 127.0.0.1. Versuchen Sie auch, der Verbindungszeichenfolge eine Portnummer hinzuzufügen, z.
String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";
Normalerweise ist der Standardport für MySQL 3306.
Vergessen Sie nicht, den Benutzernamen und das Passwort in den Benutzernamen und das Passwort Ihres MySQL-Servers zu ändern.
- Aktualisieren Sie Ihre JDK-Treiberbibliotheksdatei
- Teste verschiedene JDKs und JREs (wie JDK 6 und 7)
- Ändere nicht max_allowed_packet
" max_allowed_packet " ist eine Variable in der MySQL-Konfigurationsdatei, die die maximale Paketgröße und nicht die maximale Anzahl von Paketen angibt. Es wird also nicht helfen, diesen Fehler zu beheben.
Ändern Sie TOMCAT6_SECURITY = yes in TOMCAT6_SECURITY = no
- Verwenden Sie die validationQuery -Eigenschaft
Verwenden Sie validationQuery = "select now ()", um sicherzustellen, dass jede Abfrage Antworten enthält
Fügen Sie diesen Code Ihrer Verbindungszeichenfolge hinzu:
&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
Obwohl keine dieser Lösungen für mich funktioniert hat, empfehle ich Ihnen, sie auszuprobieren. Weil es einige Leute gibt, die ihr Problem mit diesen Schritten gelöst haben.
Aber was hat mein Problem gelöst? Mein Problem war, dass ich viele SELECTs in der Datenbank hatte. Jedes Mal habe ich eine Verbindung erstellt und sie dann geschlossen. Ich habe zwar jedes Mal die Verbindung geschlossen, aber das System war mit vielen Verbindungen konfrontiert und gab mir diesen Fehler. Ich habe meine Verbindungsvariable als öffentliche (oder private) Variable für die gesamte Klasse definiert und im Konstruktor initialisiert. Dann habe ich jedes Mal diese Verbindung benutzt. Es löste mein Problem und erhöhte auch meine Geschwindigkeit dramatisch.
Fazit
Es gibt keinen einfachen und einzigartigen Weg, um dieses Problem zu lösen. Ich empfehle Ihnen, über Ihre eigene Situation nachzudenken und die oben genannten Lösungen zu wählen. Wenn Sie diese Fehlermeldung zu Beginn des Programms erhalten und überhaupt keine Verbindung zur Datenbank herstellen können, liegt möglicherweise ein Problem in Ihrer Verbindungszeichenfolge vor. Wenn Sie diesen Fehler jedoch nach mehreren erfolgreichen Interaktionen mit der Datenbank erhalten, liegt das Problem möglicherweise bei der Anzahl der Verbindungen. Möglicherweise möchten Sie "wait_timeout" und andere MySQL-Einstellungen ändern oder Ihren Code neu schreiben, um die Anzahl der Verbindungen zu verringern.