Zum Inhalt springen

mysql Communications link failure


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe ein Problem damit, die Verbindung zur Datenbank herzustellen.

Ich benutze MySQL auf XAMP. Das mache ich, da ich php Programmiere, und da sowieso eine Datenbank ... brauche.

Von der Konsole oder mit php ist die Verbindung zur DB auch kein Problem.

Jetzt versuche ich meine erste Java Anwendung zu schreiben, die eine DB nutzt, und scheitere (momentan ) an der Verbindung.

Google und Foren durchwühlen hat nicht weitergeholfen. Alle Posts mit ähnlicher Fehlermeldung beruhten auf Problemen in Netzwerken, oder wurden nicht gelöst :(

Das ist der Code:


		try {

			Class.forName("com.mysql.jdbc.Driver") ;

		} catch (ClassNotFoundException cnfEx) {

			System.out.println("Konnte Driver "+ cnfEx.getMessage() + "nicht laden. ");

			System.exit(1) ;

		}

		try {

			Connection verbMySql = DriverManager.getConnection("jdbc:mysql://localhost/benutzer?user=root&password=pass");

		} catch (SQLException sqlEx) {

			System.out.println("Fehler beim Verbinden mit DB: " + sqlEx.getMessage()) ;

			sqlEx.printStackTrace(System.out) ;

			System.exit(1) ;

		}

Und das die Fehlermaldung die er produziert:

C:\Users\August\Documents\java SRC\javWorkspace\dbTest\src>java main.Main

Fehler beim Verbinden mit DB: 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.

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(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:409)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)

at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)

at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)

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:409)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at dbHandles.Verbindung.<init>(Verbindung.java:29)

at main.Main.main(Main.java:11)

Caused by: java.net.ConnectException: Connection refused: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(Unknown Source)

at java.net.PlainSocketImpl.connectToAddress(Unknown Source)

at java.net.PlainSocketImpl.connect(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)

... 15 more

Ich hab einfach mal alles geposted, auch wenn ich vermute, dass die ersten Reihen ausreichen.

Die MySQL Version ist 5.1.41 .

Der jdbc Driver ist die Version: Connector/J 5.1.13

Mein erster Verdacht ist, dass die beiden vieleicht nicht zusammenpassen, da ich XAMP schon vor einem 3/4 Jahr installiert habe, den Driver aber erst heute runtergeladen habe. Leider habe ich weder by Mysql noch sonstwo im Netz was zur Kompatibilität der Treiber mit den Mysql Versionen gefunden.

Ach ja. Passwort und User stimmen (wurden zig mal getestet).

Schon mal danke, an alle die sich mit dem Problem (insbesondere mit dem stack trace) auseinandersetzen.

LG

Paka

Geschrieben (bearbeitet)

Für mich hört sich das auch nach einer Inkompatibilität zwischen Treiber und Datenbank an. Versuch mal die anderen GA-Versionen des JDBC-Treibers. Ich würde auf eine 5.0.x Version tippen.

[EDIT]

Oder aber es ist der Port der Datenbank. Gib den mal mit an. Ich habe momentan hier beim Kunden keine MySQL, mit der ich den Fehler nachstellen könnte. Aber ich hatte den auch schon ein paar Mal. Ist also nichts schlimmes, geht nur nicht. :)

[/EDIT]

Schöne Grüße,

Peter

Bearbeitet von kingofbrain
Geschrieben

Mit dem mysql-connector-java-5.0.8 (das war der einzige mit 5.0.x) klappt es auch nicht. Imerhin wird die Fehlermeldung übersichtlicher.

Also dann erhalte ich die Meldung:

C:\Users\August\Documents\java SRC\javWorkspace\dbTest\src>java main.Main

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.ConnectException

MESSAGE: Connection refused: connect

STACKTRACE:

java.net.ConnectException: Connection refused: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(Unknown Source)

at java.net.PlainSocketImpl.connectToAddress(Unknown Source)

at java.net.PlainSocketImpl.connect(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)

at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)

at com.mysql.jdbc.Connection.<init>(Connection.java:1555)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at dbHandles.Verbindung.<init>(Verbindung.java:36)

at main.Main.main(Main.java:11)

** END NESTED EXCEPTION **

Last packet sent to the server was 0 ms ago.

at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)

at com.mysql.jdbc.Connection.<init>(Connection.java:1555)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at dbHandles.Verbindung.<init>(Verbindung.java:36) <---------- Zeile 36 Aufruf von getConnenct()

at main.Main.main(Main.java:11) <----------------------------- Zeile 11 main: Aufruf des Codes aus dem 1. Post

Leise kann ich damit auch nicht mehr anfangen:(

LG

Paka

Geschrieben

java.net.ConnectException

MESSAGE: Connection refused: connect

Die Meldung ist doch eindeutig!

Die typischen Fragen sind:

An welche IP und Port ist der Dienst gebunden?

Wie sehen passende Firewallregeln aus?

Stimmen ggf. die Routen zwischen Client und Server ( es nützt nichts, wenn der Client den Server connecten kann, aber z.B. ein Router die Daten vom Server nicht zum Client leiten kann)?

etc....

Geschrieben

Hallo flashpixx,

mysql nutzt den Port 3306.

Die IP von localhost ist (zitat aus C:\Windows\System32\drivers\etc\hosts )

::1 localhost

ist auch der einzige dort eingetragene Host.

Beim stöbern im Netz ist mir aufgefallen, dass localhost sonst anscheinend meist die IP 127.0.0.1 hat. Keine Ahnung ob da was nicht stimmt.

Ich nutze XAMP auf dem Rechner, und das Programm läuft ja auf dem selben, deshalb hab ich mir um die Firewall keine Gedanken gemacht. Es liegt also auch kein Router zwischen Client und Server.

Imo dürfte dann die Verbindung mit php auch nicht funktionieren.

Kannst du vielleicht erklären was du mit

etc...
noch so alles meinst.

Vielen Dank

Paka

Geschrieben

mysql nutzt den Port 3306.

Die IP von localhost ist (zitat aus C:\Windows\System32\drivers\etc\hosts )

::1 localhost

ist auch der einzige dort eingetragene Host.

Beim stöbern im Netz ist mir aufgefallen, dass localhost sonst anscheinend meist die IP 127.0.0.1 hat. Keine Ahnung ob da was nicht stimmt.

127.0.0.1 ist eine IPv4 und die ::1 eine IPv6 Adresse. Du musst eben wissen, an welche der Dienst gebunden ist und über welche Du connectest

Geschrieben

Danke für die Antwort

Du musst eben wissen, an welche der Dienst gebunden ist und über welche Du connectest

Wie erfahre ich das denn? Sorry, aber ich weiß hier echt nicht, wie ich ansetzten soll.

LG

Paka

Geschrieben

Hallo,

erst mal an etreu:

Das hat geklappt :), es kann also weitergehen.

Jetzt würde mich ehrlich gesagt nur noch interessieren, warum.

Wenn ich das richtig verstanden habe, dann rufe ich jetzt die andre IP auf. Also war hier die falsche IP eingetragen, oder wie soll ich das verstehen? Andererseits frage ich mich dann, warum ich im Browser mit http://localhost]Fachinformatiker.de... auf die richtige Seite komme.

Jetzt noch an flshpixx:

Ich habe versucht mit netstat hinter das Problem zu kommen, bin aber nicht wirklich weiter gekommen. Du hast da bei mir ein Wissen im Bezug auf Netzwerk etc vorausgesetzt, mit dem ich leider nicht dienen kann :( .

Wenn du da noch eine Erklärung nachschieben könntest, oder einen schlauen Link weißt, wäre ich mehr als dankbar.

Vielen dank an euch 2 und alle, die sich vielleicht noch Gedanken gemacht haben.

LG

Paka

Geschrieben

@etreu: Ich wollte eigentlich dass er selbst auf die Lösung kommt :-P

Erklärung: Du hast in Deiner Host stehen:

::1 localhost

Wenn Du in irgendeinen Programm nun eben eine Verbindung zu localhost aufbaust, dann schau der Rechner nach wie die IP dieses Names ist, in Deinem Fall ::1 und baut nun dorthin eine Verbindung auf.

In Deinem Fall auf die IPv6 Adresse ::1

Dein mySQL Dienst bindet sich aber an die IP Adresse 127.0.0.1, eine IPv4 Adresse. Da der Client eben die IPv6 verwendet kann er keine Verbindung zum Dienst aufbauen, da der auf der IPv4 Adresse hört, also kommt zurecht "Connection failed"

Es gibt mehrere Lösungen für das Problem: In dem genannten Fall hast Du einfach eine IPv4 Adresse 127.0.0.1 mit dem Namen "mysqld-lokal" eingetragen, d.h. wenn Du nun eine Verbindung zu "mysqld-lokal" aufbaust, liefert er korrekt die 127.0.0.1 und da der Dienst auf dieser Adresse hört, kommt die Verbindung zustande.

Alternativ könntest Du auch direkt die Verbindung zu 127.0.0.1 aufbauen, d.h. Du brauchst den Eintrag in der Datei nicht. Oder Du konfigurierst den mySQL Dienst so, dass er sowohl auf der IPv4 127.0.0.1, wie auch auf der IPv6 ::1 gebunden wird

Deshalb mein Hinweis zu dem Programm "netstat", das Dir eben ausgeben kann, welcher Dienst an welche Adresse und welchen Port gebunden sind.

Damit hättest Du sehen müssen, dass der mysql-Dämon eben an eine IPv4 Adresse gebunden ist, nachdem Du die Einträge Deiner host-Datei anschaust, hätte klar sein müssen, dass eben die beiden Adresse nicht zueinander passen.

Generell: Du solltest Dich schon mit den Grundlagen der Netzwerkkommunikation auskennen, wenn Du mit solchen Sachen arbeitest.

Geschrieben

Hallo,

erstmal danke für die Erklärung.

Der Tipp mit netstat war bestimmt gut, nur ist es mir nie gelungen, einen der Einträge mit dem mysql Dienst in Verbindung zu bringen. Ich denke, genau das hätte ich aber tun müssen. Daher konnte ich auch nie nachweisen, dass das Problem tatsächlich hier lag. Der einzige Anhaltspunkt, um die Einträge zuzuordnen, war die PID. Diese kenne ich für den mysql-Dienst aber nicht, und weiß auch nicht, wie ich die rauskriege.

Mir war schon klar, dass du mir auf die Sprünge helfen wolltest, und dass es wahrscheinlicher einfacher für dich gewesen wäre, nur die Lösung zu posten. Ich hab deshalb auch erst mal alleine weiter gemacht, und versucht den Kram zu lösen, statt einfach weiter zu fragen. Aber wirklich weiter bin ich nicht gekommen

Selbst jetzt bin ich da noch nicht weiter gekommen. Aber ich werd dranbleiben.

Also nochmal danke

LG

Paka

Geschrieben
Der einzige Anhaltspunkt, um die Einträge zuzuordnen, war die PID. Diese kenne ich für den mysql-Dienst aber nicht, und weiß auch nicht, wie ich die rauskriege.

Unter Linux nimmt man dafür "ps" und soweit wie ich weiß kann man die PID unter Windows im Taskmanager ablesen und über beides erhält man auch den Klartextnamen

Geschrieben (bearbeitet)

Unter Windows gibt es dafür die sysinternals Tools. Du kannst dir die PID besorgen und schauen welche Ports der Prozess belegt.

Unter Linux würde ich dafür auch noch lsof benutzen.

EDIT:

Der Eintrag in der hosts-Datei war nur zum finden des Symptoms gedacht und sollte von dir nicht als Lösung angesehen werden.

Bearbeitet von etreu

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...