# MariaDatabase Einstellungen für Verbindungen



## FawKes100 (16. Apr 2019)

Moin moin, ich hab ein kleines Problem.
Ich habe in den letzten Wochen an einem Datenbank-Explorer gearbeitet (mit JavaFX) und habe das ganze bisher daheim getestet, also bisher lediglich eine Verbindung zum Localhost aufgebaut.
Nun wollte ich nachdem ich mein Projekt fast fertig gestellt habe das ganze mit einer externen Datenbank erledigen, die auf einem angemieteten vServer gespeichert wird.
Ich verwende hierbei sowohl korrekten Anmelde-Informationen, als auch die korrekte IP-Adresse.
Auf der Datenbank habe ich für das betreffende Benutzerkonto folgende Einstellungen getroffen:
Benutzername: Fawkes
Hostname: Jeder Host
Passwort: xxx
Wiederholen: xxx
Authentifizierungsplugin: Native MySQL-Authentifizierung

Nun habe ich allerdings das Problem dass ich folgende Fehlermeldung erhalte beim Verbindungsaufbau:



Spoiler: Fehlermeldung (Stacktrace)





```
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:832)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at network.databases.DatabaseConnector.connect(DatabaseConnector.java:25)
    at core.PhoenixStudio.createNewDatabaseConnectorAndConnect(PhoenixStudio.java:159)
    at sample.Controller.onConnect(Controller.java:154)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$358(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
```




Meine Connect Methode sieht hierbei folgend aus:


```
@Override
    public void connect()
    {
        try {
            connection = DriverManager.getConnection("jdbc:mysql://"+decode(ip) + ":" + port + "/" + decode(database) + "?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Moscow",
                    decode(user), decode(password));
        } catch (SQLException | CJCommunicationsException e) {
            e.printStackTrace();
        }
    }
```
Allerdings glaub ich nicht dass der Fehler in meinem Code liegt, da das ganze auf der lokalen Datenbank noch wunderbar funktioniert. Somit vermute ich dass ich an den Einstellungen für den Nutzer der Datenbank ein bisschen was verändern muss. Hat jemand eine Idee, wie ich dieses Problem in den Griff bekomme?


----------



## mihe7 (16. Apr 2019)

FawKes100 hat gesagt.:


> Nun wollte ich nachdem ich mein Projekt fast fertig gestellt habe das ganze mit einer externen Datenbank erledigen, die auf einem angemieteten vServer gespeichert wird.


Ist denn die DB von außerhalb überhaupt erreichbar? Der Port darf nicht von der Firewall blockiert sein und die DB muss auch auf die Netzwerkschnittstelle und nicht nur auf localhost lauschen.


----------



## FawKes100 (18. Apr 2019)

Den Port habe ich nun freigegeben (Betriebssystem: Debian 9) mit folgendem Befehl: `iptables -A INPUT -p udp --dport 3306 -j ACCEPT` Damit sollte der Port doch eigentlich nicht mehr von der Firewall blockiert werden, oder? Jedenfalls erhalte ich noch immer den gleichen Fehler.
Wie stelle ich denn ein dass die DB auf die Netzwerkschnittstelle lauscht? Muss ich das bei der Installation einstellen oder kann ich das irgendwo über phpmyadmin einstellen?


----------



## mihe7 (18. Apr 2019)

Warum UDP? Sollte doch eigentlich TCP sein.


----------



## kneitzel (18. Apr 2019)

Hi,

mariadb wird auch über /etc/maysql/ konfiguriert.

Die Konfiguration ist unterteilt in mehrere Dateien, welche sich in den Unterverzeichnissen mariadb.conf.d und conf.d befinden.
Für Dich wichtig ist /etc/mysql/mariadb.conf.d/50-server.cnf

In der Datei findet sich die Zeile:
bind-address            = 127.0.0.1

Diese Zeile kannst Du auskommentieren, dann sollte mariadb auf alle interfaces zugreifen. Die Adresse auf 0.0.0.0 zu setzen geht aber wohl auch.


----------



## kneitzel (18. Apr 2019)

Und ja, die Portfreigabe muss natürlich tcp sein und nicht udp!

Siehe auch https://mariadb.com/kb/en/library/configuring-mariadb-for-remote-client-access/


----------

