Ich habe eine Standard-Installation von mysql 5.5 installiert. Obwohl ich über den Befehl mysql eine Verbindung zum mysql-Dienst herstellen kann und der Dienst anscheinend ausgeführt wird, kann ich keine Verbindung über spring + tomcat oder einen externen JDBC-Connector herstellen.
Ich benutze die folgende URL:
jdbc:mysql://myserver.com:myport/mydb
mit dem richtigen Benutzernamen / Passwort, aber ich erhalte die folgende Nachricht:
server.com: 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.
und Kater wirft:
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.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Das scheint dasselbe Problem zu sein, als würde ich versuchen, eine externe Verbindung herzustellen.
Antworten:
Dies kann verschiedene Gründe haben. Ich habe es vor ein paar Wochen selbst gesehen, aber ich kann mich nicht erinnern, was für eine Lösung das für mich war.
1) Vergewissern Sie sich, dass die Adresse, an die mysql gebunden ist, wahrscheinlich 127.0.0.1 (nur) ist, was meines Erachtens die Standardadresse ist (zumindest auf Standard-Ubuntu-Servern). Sie müssen den Parameter bind-address in my.cnf auskommentieren, um an alle verfügbaren Adressen zu binden (Sie können nicht mehrere auswählen, es ist eine oder alle).
2) Wenn es an 127.0.0.1 gebunden ist und Sie keine Verbindung mit "localhost" herstellen können, stellen Sie sicher, dass es nicht in die IPv6 localhost-Adresse anstelle von IPv4 aufgelöst wird. (oder benutze einfach die IP-Adresse)
3) Überprüfen Sie den Port, den MySQL abhört, doppelt und dreifach.
4) Stellen Sie sicher, dass Sie den richtigen JDBC-Connector für Ihr JDK verwenden.
5) Stellen Sie sicher, dass Sie nichts wirklich Dummes tun, wie mysql mit --skip-networking zu starten.
Ich denke, mein erster Vorschlag ist der vielversprechendste ... in der Tat denke ich, dass ich ihn kürzlich dort gesehen habe ... Ich habe versucht, eine Remoteverbindung zu mysql herzustellen (auch unter Ubuntu 8.04).
quelle
Ich hatte in zwei meiner Programme das gleiche Problem. Mein Fehler war:
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:
Linux: /etc/my.cnf
Windows: D: \ Programme \ mysql \ bin \ my.ini
Hier sind die Lösungen:
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"
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.
Fügen Sie diese Zeilen zur MySQL-Konfigurationsdatei hinzu:
wait_timeout = number
interactive_timeout = number
connect_timeout = number
Stellen Sie sicher, dass die Firewall oder die Anti-Virus-Software den MySQL-Dienst nicht blockieren.
Überprüfen Sie Ihre Abfragezeichenfolge. Ihre Verbindungszeichenfolge sollte etwa so aussehen:
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.
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.
" 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 validationQuery = "select now ()", um sicherzustellen, dass jede Abfrage Antworten enthält
Fügen Sie diesen Code Ihrer Verbindungszeichenfolge hinzu:
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.
quelle
Wenn Sie eine Linux-Installation ausführen, blockiert Lokkit wahrscheinlich eingehende Kommunikationen, außer über SSH.
Melden Sie sich als root an und führen Sie den Befehl lokkit an der Eingabeaufforderung aus. Deaktivieren Sie die Firewall und SElinux, und überprüfen Sie, ob das gleiche Problem vorliegt.
Überprüfen Sie auch, ob Ihre Berechtigungen korrekt festgelegt wurden, damit alles an den richtigen Speicherort geschrieben werden kann.
quelle
Es gibt auch diesen großen Fehler in Version 5.1.9 des mysql-jdbc-Treibers:
http://bugs.mysql.com/bug.php?id=47494
quelle
Dies kann auch durch falsche Proxy-Einstellungen verursacht werden . Ich hatte dieses Problem beim Versuch, über jdbc eine Verbindung zu einer MySQL-Instanz herzustellen, die in einer virtuellen Parallels-Appliance auf meinem Mac ausgeführt wird. Die jdbc-Verbindung verwendet die Netzwerkeinstellungen auf Systemebene. Da ich mich hinter einem SOCKS-Proxy befand, musste ich den MySql-Host als Nicht-Proxy-Host festlegen (z. B. auf einem Mac können Sie dies unter Einstellungen-> Netzwerk-> Erweitert- konfigurieren. > Proxies und fügen Sie schließlich den Hostnamen oder die IP-Adresse unter "Proxy-Einstellungen für diese Hosts und Domains umgehen" hinzu.
quelle
MySQL Connector / J unterstützt nur TCP / IP. Java unterstützt keine Konnektivität mit Unix-Domain-Sockets
Wenn MYSQL mit dem Flag "Netzwerk überspringen" gestartet wird oder wenn MySQL hinter der Firewall ausgeführt wird, ist die TCP / IP-Option deaktiviert. Damit Java nicht mit MySQL kommunizieren kann.
quelle
Ich hatte fast einen Tag lang ein sehr ähnliches Problem und es machte mich verrückt! Aber ich habe es geschafft, die Lösung zu finden, und es war sehr, sehr einfach, Sie müssen nur /etc/init.d/tomcat6, um TOMCAT6_SECURITY = yes zu TOMCAT6_SECURITY = no zu ändern. es ist nicht meine lösung, ich habe sie hier gefunden , wie ihr sehen könnt, ich lasse ubuntu laufen, hoffe das funktioniert.
quelle
Ich hatte das gleiche problem Die Eigenschaft "bind-address" in der Datei /etc/mysql/my.cnf wurde in 0.0.0.0 geändert und funktioniert. Die entsprechende Zeile in my.cnf sieht folgendermaßen aus:
Bindeadresse = 0.0.0.0
Bevor es auf die externe IP-Adresse des Servers gesetzt wurde, sah es ungefähr so aus:
Bindeadresse = 196.152.4.145
Ich denke, wenn es auf die externe IP-Adresse und nicht die Localhost-Schleife eingestellt ist, ist MySQL-Server nur mit der Netzwerkkarte verbunden und hört nicht auf die Verbindungen von der lokalen Schleife.
quelle
Versuchen Sie Ihre lokale Adresse, um die Adresse in der Datei my.cnf zu binden
Verbindung con = null;
quelle