Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Datenbank Container – MariaDB

Mittlerweile benötigt fast jede WEB-Anwenung eine Datenbank im Hintergrund. Ob Blog, Web-Tracker, Cloudspeicher, CRM-Programme und so weiter… Keine dieser Anwendungen würde ohne Datenbank laufen.

Früher war die Waffe der Wahl unter Linux ganz klar MySQL. Seit das Projekt aber an Oracle verkauft wurde, gab es immer mehr Spannungen bei den Entwicklern und der Community. Dies gipfelte dann in der Abspaltung des Projekts in die MariaDB, welche eine vollständig kompatible Plattform und mittlerweile sogar pfiffige Lösungen auf Basis von MySQL bietet.

Ich selbst benutze die MariaDB schon seit gut sechs Jahren und wurde bisher noch nie enttäuscht. Darum setze ich auch bei unserem Docker-Setup auf MariaDB.

Grundlegende Designentscheidung bei den Docker Containern

Die Docker Philosophie besagt – und die meisten Anleitungen machen das auch so – dass für jedes Projekt eine eigener Datenbank Container aufgemacht wird. Sprich bei 10 WordPress Containern haben wir auch 10 Datenbank Container. Ein DB-Server für jedes Projekt. Das funktioniert, ist aber extrem ineffizient, was die Ressourcen angeht.

Im Gegensatz dazu setze ich nur einen einzigen Datenbank Container auf, der alle Datenbanken und Datenbank Benutzer sämtlicher Anwendungen zentral verwalten wird. In meinen Augen hat das zwei ganz große Vorteile:

  • Der „Overhead“ wird minimiert. Pro Datenbank können wir unserem Hostsystem gute 150 bis 200 MB RAM sparen!
  • Wir koppeln den zentralen Datenbank Container an das Host-System an und sind dadurch in der Lage, vom Betriebssystem aus darauf zuzugreifen, um Datensicherungen oder Datenbankoperationen auszuführen. Das fühlt sich an, als ob die Datenbank „normal“ lokal installiert wäre und nicht über einen Docker Container läuft.

Da sich dies wie erwähnt deutlich von der „üblichen“ Vorgehensweise unterscheidet, weise ich deswegen gleich am Anfang auf diesen Umstand hin… Was dann später die Konfigurationen der Anwendungs-Container angeht, besteht der Unterschied zur „Ein Datenbank-Container pro Anwendung“ Lösung aber nur darin, dass wir die Datenbank in der „docker-compose“-Datei nicht intern verlinken, sondern extern auf unseren zentralen Datenbank Container.

Achtung: Keine Missverständnisse…
Wir quetschen mit diesem Setup natürlich NICHT alles in EINE Datenbank :)
Wir starten nur einen DatenbankSERVER. Innerhalb dieses Datenbankservers werden wir für jede Anwendung einen eigenen Benutzer und selbstverständlich auch eine eigene Datenbank anlegen, damit alle Dienste sauber voneinander getrennt sind.

Unser MariaDB Container und Traefik v2.1
Da Traefik unsere Datenbank nicht nach außen ans Web bringt, ist das der einzige Teil des Tutorials, das wir für Traefik v2.1 nicht überarbeiten müssen. MariaDB bekommt vom Reverse Proxy nichts mit und Traefik lässt MariaDB auch in Frieden. Die laufen praktisch beide aneinander vorbei…

Vorbereitungen zur Installation von MariaDB auf dem Host

Bevor wir den MariaDB-Container anlegen, laden wir noch einige Programme für den Umgang mit der Datenbank auf unser System. Die nötigen Repositories bekommen wir von der MariaDB Homepage: https://downloads.mariadb.org/mariadb/repositories/#

Achtung: Hier gehe ich davon aus, dass Du das aktuelle Basis-System Tutorial durchgearbeitet hast und wir ein Debian 10 (Buster) Betriebssystem mit Docker und docker-compose am Start haben!

Für die Installation sollten wir als „root“ Benutzer angemeldet sein, uns per „sudo -i“ zum root erklärt haben oder vor jeden Befehl ein „sudo“ voranstellen…

apt install -y software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.4/debian buster main'
apt update && apt install -y mariadb-client

Die ersten drei Zeilen besorgen uns die nötigen Programme und richten das Repository ein, über das wir dann in Zeile 4 die Anwendungen für den MariaDB Client herunterladen (Nicht den Server! Der kommt ja in den Container).

Anzeige *

11 Kommentare zu „Datenbank Container – MariaDB“

  1. Peter Fiedler

    Hallo André,
    ich lehne mich mal aus dem Fenster und glaube, dass Du beim Anlegen des Benutzers nur „localhost“ gesagt hast:
    Also statt „CREATE USER ‚wp_user’@’%‘ IDENTIFIED BY ‚unglaublichsicherespasswort‘;“
    nimmst Du „CREATE USER ‚wp_user’@’localhost‘ IDENTIFIED BY ‚unglaublichsicherespasswort‘;“

    Da kann dann der Docker-Container nicht zur Datenbank, weil der eben nicht mehr „localhost“ ist. Da bin ich seinerzeit auch drüber gestolpert. Das „Prozent-Zeichen“ lässt eine Verbindung von allen Hosts zu.

    Wenn es das nicht ist, brauche ich Deine Config Dateien als Mail, weil sonst ist es nur Stochern im Nebel…

    1. Hallo Peter,
      vielen Dank für das tolle Tutorial.
      Leider habe ich genau die gleichen Probleme wie Andre.
      Ich habe Deine docker-compose.yml 1:1 übernommen aber kann mich leider auch nicht einloggen.
      Was mache ich falsch?
      Viele Grüße, Michael

      1. Peter Fiedler

        Servus Michael,
        hast Du auch das Basis-System 1:1 so installiert wie im Tutorial? Oder benutzt Du als „Unterbau“ was anderes als ein Debian 10 Minimal?

        Beste Grüße
        Peter.

        1. Hallo Peter,

          ich habe als Unterbau ein Ubuntu 18.04 LTS.
          Den Debian Unterbau hatte ich nicht, weil ich bereits andere Experimente mit Docker gemacht habe.

          Viele Grüße,
          Michael

          1. Peter Fiedler

            Dann ist wohl eine Einstellung in Ubuntu „schuld“ an der Sache. Andre hat auch Ubuntu als Unterbau verwendet…

          2. Hallo Peter,
            zwei „Fehler“ konnte ich finden:
            1) Das Passwort war 44 Zeichen lang, das wurde nicht genommen (mein aktuelles PW ist 32 Zeichen lang)
            2) Bei der ersten Initialisierung wird zunächst eine temporäre Datenbank angelegt. An dieser kann man sich nicht anmelden. Nach ca. 3 Minuten steht dann die reguläre Datenbank zur Verfügung und die Anmeldung klappt :-) .

            Also: Problem gelöst :-)
            Vielen Dank und viele Grüße,
            Michael

          3. Peter Fiedler

            Interessante Hinweise, Michael, vielen Dank!
            1) Mein PW in der Testumgebung hat 64 Zeichen und wird akzeptiert. Eventuell ist bei dem 44-Stelligen ein Sonderzeichen oder Symbol drin, das Ärger macht? Da muss ich mich dringend mal schlau machen, welche Sonderzeichen in Passwörtern generell klemmen und nicht benützt werden sollten…
            2) Komisch, dass das so lange dauert. Wenn ich neue Server aufsetze, nehme ich da immer eine Textdatei mit den ganzen Instruktionen, die ich der Reihe nach abarbeite. Und da melde ich mich gute 10 Sekunden nach dem ersten Hochfahren des MariaDB Containers daran an. Verrückt. Aber gut zu wissen. Dann ergänze ich das Tutorial um den Hinweis, dass es an der Stelle dauern kann.

            Danke auf jeden Fall für die Rückmeldung! Das ist sehr hilfreich :)
            Weiterhin viel Spaß mit dem Server…
            Peter.

          4. Hallo Peter,
            ich habe jetzt nochmal einen Server mit Debian Buster aufgesetzt:
            – 16384 MB RAM
            – 512 GB SSD
            – 8 Kerne XEON CPU @3,9GHz

            Des Weiteren habe ich das komplette Tutorial bis zur MariaDB durchgearbeitet:
            Die Länge des Passwortes habe ich getestet, 44 Zeichen nimmt er tatsächlich nicht an (Nur Groß-/Kleinbuchstaben und Ziffern, keine Sonderzeichen). Außerdem kreiert er wieder beim ersten Start die temporäre Datenbank und ermöglicht keinen Login. Wenn man sich in der Zeit versucht einzuloggen, startet die Datenbank scheinbar anschließend gar nicht mehr.

            Vielleicht helfen Dir diese Erfahrungen ja.

            Viele Grüße
            Michael

          5. Peter Fiedler

            Echt verrückt…
            Ich schnapp mir mal eine Testmaschine und lass da die Datenbank neu bauen. Das interessiert mich, ob da seit meiner Anleitung sich vielleicht am Server generell was geändert hat. Ansonsten muss ich das Tutorial umschreiben, dass man das Log im Auge haben muss und erst nach dem Abschluss der Initialisierung weiter machen darf.
            Meine Server sind meistens kleiner als die Hardware, die Du im Einsatz hast. Von der Performance her sollte Dein Rechner das locker packen.

            Das ist momentan meine Datenbankversion:
            Server version: 10.4.12-MariaDB-1:10.4.12+maria~bionic

            Danke auf jeden Fall noch mal für den Hinweis, Michael!

  2. Hallo Peter!
    Hier André wieder ;)
    bin bei angekommen. Leider bekomme ich nach der Eingabe des Passworts diese Meldung auf dem Host:
    Enter password:
    ERROR 1130 (HY000): Host ‚172.19.0.1‘ is not allowed to connect to this MariaDB server
    im Log dies:
    [Warning] Aborted connection 14 to db: ‚unconnected‘ user: ‚unauthenticated‘ host: ‚172.19.0.1‘ (This connection closed normally without authentication)
    Habe nen Ubuntu18044 genommen. Das ist aber das einzige was anders ist.
    Hast du ne Idee?!
    Danke für die Anleitungen! Sind Gold wert ;)
    Grüße

    1. Hatte diese Problem auch.
      Habe den per Docker-Compose mariadb runtergefahren und dann als root noch mal komplett aufgeräumt.
      rm -rf /var/maria104masterdata
      Löscht alle DB-Daten.
      Dann wieder hochfahren des Docker-Compose… Gedulden und Logs beobachten.
      Dann ging es.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top