Keine MySQL-Verbindung

Started by WeHostYou, September 17, 2016, 07:29:47 PM

Previous topic - Next topic

WeHostYou

Hallo,

Seit einem Update vor ein paar Tagen (welches das Webinterface von 3020 auf 3023 hob), kann ich den Bot nicht mehr starten.
In der Log-Datei steht immer eine MySQL-Verbindungsfehler. Ich habe die Einstellungen alle mehrfach abgecheckt, scheint alles richtig zu sein.

Als letzte Notbremse habe ich mal den Bot komplett inkl. Webinsterface vom Server gelöscht. Die MySQL-Datenbank habe ich inkl. zugehörigen Benutzer auch entfernt.
Neu die ZIP runtergeladen, entpackt, auf den Server kopiert. Anschließend habe ich in der Datenbank einen neuen Benutzer und eine zugehörige Datenbank erstellt. Dann habe ich den Bot neu konfiguriert. Danach habe ich mich ans Webinterface gesetzt. Dabei habe ich die DB-Daten fast gleichzeitig erstellt und in beides rein kopiert (Bot cfg und Webinterface). Das Webinterface kann auch super mit der Datenbank arbeiten, der Bot aber scheinbar nicht. Und das macht mich ziemlich stutzig. Um Linux-Rechte-Fehler auszuschließen habe ich mal vom gesamten Verzeichnis inkl. gesamten Inhalt den Eigentum auf root root gesetzt und die Rechte auf rwxrwxrwx und den Bot anschließend mit root gestartet. Nachdem das aber auch nichts gebracht hat, habe ich den Bot wieder ein bisschen mehr isoliert.
Alles läuft auf dem gleichen Server (TS3, Bot, Webserver, Webinterface, MySQL, PhpMyAdmin).

Ich hoffe (kann aber nicht ausschließen), dass ich bei den Einstelungen nichts übersehen habe!

Mit freundlichen Grüßen
Christian von WeHostYou

Stefan1200

Neu machen ist bei MySQL Fehlermeldungen nie die Lösung, da du den Fehler beim MySQL Server damit aber nicht löst.

Bitte poste hier doch mal die Logdatei.

WeHostYou

Hallo Stefan,
danke für deine Antwort.

Ich hatte den Schritt gewählt, weil ich dachte beim Update etwas falsch gemacht zu haben, was eine versehentliche Falsch-Konfiguration oder sowas verursacht hat. Deshalb habe ich mich dazu entschieden. Und da das genau nach dem Update auftrat, hatte ich den DB-Server nicht wirklich in Vermutung (alle anderen Dienste, die den DB-Server benötigen u.A. das eigene Webinterface laufen auch noch).

Hier mal die Log:
Quote2016-09-17 19:43:10   START_MANAGER   JTS3ServerMod 6.2.2 Hosting Edition (06.09.2016) Instance Manager started...
2016-09-17 19:43:10   CONFIG   Loading InstanceManager config file from: /root/JTS3ServerMod_HostingEdition/config/JTS3ServerMod_InstanceManager.cfg
2016-09-17 19:43:10   CONFIG   Bot chat command !exec is enabled!
2016-09-17 19:43:10   CONFIG   Multi IP Mode disabled!
2016-09-17 19:43:10   LOGGER_SQL_ERROR   Critical: Cannot connect to MySQL server for logging!
2016-09-17 19:43:10   JTS3ServerMod 6.2.2 Hosting Edition (06.09.2016): EXCEPTION
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:57)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:988)
   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
   at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
   at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
   at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
   at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
   at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
   at java.sql.DriverManager.getConnection(DriverManager.java:571)
   at java.sql.DriverManager.getConnection(DriverManager.java:215)
   at de.stefan1200.util.MySQLConnect.connect(Unknown Source)
   at de.stefan1200.jts3servermod.u.a(Unknown Source)
   at de.stefan1200.jts3servermod.u.<init>(Unknown Source)
   at de.stefan1200.jts3servermod.f.c(Unknown Source)
   at de.stefan1200.jts3servermod.f.<init>(Unknown Source)
   at de.stefan1200.jts3servermod.JTS3ServerMod.main(Unknown Source)
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
   at java.net.PlainSocketImpl.socketConnect(Native Method)
   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
   at java.net.Socket.connect(Socket.java:579)
   at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
   ... 20 more
2016-09-17 19:43:10   CONFIG   MySQL mode enabled!
2016-09-17 19:43:10   MYSQL_ERROR   Error while connecting to database: 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.
2016-09-17 19:43:10   JTS3ServerMod 6.2.2 Hosting Edition (06.09.2016): EXCEPTION
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:57)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:988)
   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
   at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
   at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
   at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
   at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
   at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
   at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
   at java.sql.DriverManager.getConnection(DriverManager.java:571)
   at java.sql.DriverManager.getConnection(DriverManager.java:215)
   at de.stefan1200.util.MySQLConnect.connect(Unknown Source)
   at de.stefan1200.jts3servermod.f.e(Unknown Source)
   at de.stefan1200.jts3servermod.f.c(Unknown Source)
   at de.stefan1200.jts3servermod.f.<init>(Unknown Source)
   at de.stefan1200.jts3servermod.JTS3ServerMod.main(Unknown Source)
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
   at java.net.PlainSocketImpl.socketConnect(Native Method)
   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
   at java.net.Socket.connect(Socket.java:579)
   at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
   ... 19 more
2016-09-17 19:43:10   QUIT_MANAGER   InstanceManager config file at "/root/JTS3ServerMod_HostingEdition/config/JTS3ServerMod_InstanceManager.cfg" does not exists, is not valid or an error while connecting to the database occurred, quitting now...

Ich hoffe, dass das weiter hilft!

Mit freundlichen Grüßen
Christian von WeHostYou

Flofus

2016-09-17 19:43:10   JTS3ServerMod 6.2.2 Hosting Edition (06.09.2016): EXCEPTION
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


Die Zugangsdaten im bot sind falsch eingeragen vgl. Externe ip etc

WeHostYou

Danke, Flofus, für deine Antwort.

An die Zugangsdaten habe ich auch als erstes gedacht. Ich habe sie aber beim Update-Prozess nicht in der CFG-Datei geändert.
Trotzdem habe ich die dort nochmal neu eingetragen. Als das nicht ging, habe ich die in PhpMyAdmin geändert. Auch das hat nichts geholfen. Und spätestens als ich ALLES neu gemacht habe, hätte ich es doch richtig eintragen müssen.
Ich habe es gerade noch einmal überprüft. Die Daten stimmen. Ich habe sie extra nochmal aus dem Webinterface CFG kopiert, das ja mit der DB sauber arbeiten kann.

Hier mal die Bot CFG:
Quote# Use a MySQL database to save bot instances and configurations. 1 = Enable, 0 = Disable
# There should be a structure sql file in the documents directory.
# Import this into your MySQL database to create the tables (the included web interface do this already for you).
# But you must fill this tables by yourself, the bot just reads the information out there.
mysql_enable = 1
mysql_host = localhost
mysql_port = 3306
mysql_user = TS3ServerMod
mysql_password = jZd7lhZo86MAz2mn
mysql_database = TS3ServerMod
Und hier die WI CFG:
Quote<?php /*
localhost
TS3ServerMod
jZd7lhZo86MAz2mn
TS3ServerMod
*/ ?>

Das Passwort habe ich natürlich hier geändert, aber nach genau diesem Muster sieht es aus. Ich habe das Passwort damals beim Erstellen des Benutzers in der Datenbank mit der Zwischenablage kopiert und in die CFG eingefügt. Und jetzt gerade nochmal aus der WI CFG via Copy & Paste rüber kopiert. Also kann ich (zumindest für meinen Gedankengang) das Passwort ausschließen. Oder sehe ich das falsch?
Ich glaube, ich stehe komplett auf dem Schlauch!

Mit freundlichen Grüßen
Christian von WeHostYou

Flofus

Am Ende meldet der bot auch noch einen Fehler 2016-09-17 19:43:10   QUIT_MANAGER   InstanceManager config file at "/root/JTS3ServerMod_HostingEdition/config/JTS3ServerMod_InstanceManager.cfg" does not exists, is not valid or an error while connecting to the database occurred, quitting now... kann das sein das die Datei falsch beschrieben oder der Dateiname sich verändert hat

Stefan1200

#6
@ WeHostYou: Bitte folgenden Beitrag lesen: https://www.stefan1200.de/forum/index.php?topic=448.0
Am Wahrscheinlichsten ist dein Problem der Punkt mit dem bind-address Attribut, da PHP dann funktioniert, aber JDBC nicht.

@ Flofus: Die Meldung hat nichts mit dem MySQL Benutzer zu tun, diese Meldung kommt bereits beim Verbindungsversuch mit der Datenbank.
Und die Zeile:
2016-09-17 19:43:10   QUIT_MANAGER   InstanceManager config file at "/root/JTS3ServerMod_HostingEdition/config/JTS3ServerMod_InstanceManager.cfg" does not exists, is not valid or an error while connecting to the database occurred, quitting now...
Kommt immer, wenn es beim Laden bei der Konfiguration einen Fehler gab, darunter fällt auch die Datenbank Verbindung, wie am Ende von dieser Zeile zu lesen ist. Mit der JTS3ServerMod_InstanceManager.cfg ist alles in Ordnung.

WeHostYou

Ich danke euch für die Hilfen!

Stefan hatte jetzt die Lösung für mich. Ich habe im MySQL die Bindung von der externen IP auf die 0.0.0.0 umgestellt. Danach hat der Bot problemlos gestartet.
Jetzt frage ich mich aber warum das vor dem Update funktioniert hatte? Ich hatte beim Update nämlich keinerlei Konfigurationen im Server geändert.
Und eine weitere Frage: Wenn der MySQL-Server vorher nur an die externe IP des Servers gebunden war, warum konnte dann das Webinterface damit arbeiten und diverse andere Dienste? Denn auch das WI ist auf demselben Server und arbeitet dementsprechend über localhost.

Das ganze kommt mir ziemlich komisch vor. Aber zumindest läuft es jetzt erst mal wieder, das ist die Hauptsache.

Mit freundlichen Grüßen
Christian von WeHostYou

Stefan1200

Quote from: WeHostYou on September 18, 2016, 08:39:30 PM
Stefan hatte jetzt die Lösung für mich. Ich habe im MySQL die Bindung von der externen IP auf die 0.0.0.0 umgestellt. Danach hat der Bot problemlos gestartet.
Jetzt frage ich mich aber warum das vor dem Update funktioniert hatte? Ich hatte beim Update nämlich keinerlei Konfigurationen im Server geändert.
Und eine weitere Frage: Wenn der MySQL-Server vorher nur an die externe IP des Servers gebunden war, warum konnte dann das Webinterface damit arbeiten und diverse andere Dienste? Denn auch das WI ist auf demselben Server und arbeitet dementsprechend über localhost.

Ich habe schon Stunden mit dem "Communications link failure" Fehler verbracht. Nach langem googeln habe ich dann irgendwann rausgefunden, das JDBC mit MySQL auf einem anderen Weg kommuniziert, als PHP. Tatsächlich muss die externe IP nicht auf 0.0.0.0 stehen, wenn alles nur über 127.0.0.1 eine Verbindung aufbaut. Wichtiger ist aber, das dort was eingetragen ist bei bind-address. bind-address = 127.0.0.1 müsste dann auch funktionieren.

WeHostYou

Naja: Technik!
Da macht man nichts, manchmal hat sie einfach ihren eigenen Kopf ;)

Es läuft auf jeden Fall alles gut, jetzt, und das stellt mich zufrieden.
Ich danke euch auf jeden Fall allen, die versucht haben zu helfen!

Mit freundlichen Grüßen
Christian von WeHostYou