Praktische Anleitung zum Hosting von MariaDB

Einleitung

Nach einigen kleinen Experimenten habe ich eine Instanz der neuesten stabilen Version von MariaDB in ContainerStation erfolgreich eingerichtet und möchte einige Erkenntnisse teilen. Um die erfolgreiche Bereitstellung zu überprüfen, umfasst dieser Prozess auch Folgendes:

  • Erstellung eines dedizierten Service-Benutzers, backup, mit eingeschränkten Berechtigungen für diese Rolle

  • Aufbau einer Remote-Verbindung über PHPMyAdmin

  • Erstellung einer Testdatenbank und Durchführung eines Test-Backups

  • Löschen eines Datensatzes aus der Testdatenbank und Durchführung einer Test-Wiederherstellung

  • Schreiben und Testen eines Skripts zur Automatisierung von Datenbank-Backups

  • Einbindung des Skripts in den nativen QTS-Planer (crontab) zur vollständigen Automatisierung

Im Anschluss an diesen ersten Beitrag finden Sie eine Reihe von „Antworten“, die Sie Schritt für Schritt durch diesen Prozess führen.

Bevor Sie weiterlesen, ein wichtiger Hinweis: Ich bin weder Mitarbeiter von QNAP noch von MariaDB, und ich bin kein professioneller DBA. Ich bin ein mäßig kompetenter Technologe, der sich auf der (Linux-)Kommandozeile, mit SSH und beim Experimentieren wohlfühlt. Ich bin kein Experte für die folgenden Themen, aber ich habe genug ausprobiert, um alles zum Laufen zu bringen. Bitte berücksichtigen Sie dies beim Lesen dieser Anleitung – und bitte antworten Sie, falls Ihnen Fehler oder Verbesserungsmöglichkeiten auffallen. Bedenken Sie auch, dass, obwohl unten nichts faktisch falsch ist \[da ich alles wie beschrieben zum Laufen gebracht habe\], dies nicht bedeutet, dass diese Anleitung den besten Ansatz definiert. Betrachten Sie dies bitte als einen Anfang oder als Sprungbrett, um Ihnen einen grundlegenden Überblick zu geben und Ihnen zu ermöglichen, selbst weiter zu forschen. Wenn Sie Ratschläge von jemandem im Internet annehmen, sollten Sie immer die Quelle berücksichtigen.

Doch bevor wir zum spannenden Teil kommen, müssen wir drei kritische Fragen stellen und beantworten. Die erste lautet: Da QNAP MariaDB bereits als native Anwendung unter QTS bereitstellt, warum sollten wir es überhaupt in ContainerStation installieren wollen? Ist das nicht einfach eine zusätzliche Schicht, die wir nicht brauchen?

Das ist eine entscheidende Frage, und es ist wichtig, sie zu bedenken und nur weiterzumachen, wenn es einen legitimen Grund dafür gibt. Kurz gesagt, die drei wahrscheinlichsten positiven Antworten auf diese Frage sind:

  • Wenn Sie schon bei der Installation wissen, dass Sie Ihre MariaDB-Instanz in naher Zukunft auf eine andere Hardware-Plattform verschieben müssen – denn das Exportieren eines Containers, ihn woanders hinzubringen und dann zu importieren, ist viel einfacher als mehrere Installationen durchzuführen und möglicherweise eine Menge Datenbanken zu archivieren und wiederherzustellen…

  • Wenn Sie feststellen, dass eine Anwendung, die Sie auf MariaDB bereitstellen möchten, Funktionen benötigt, die in der nativen QNAP/QTS-Version der App nicht verfügbar sind. (Das war bei mir der Fall – ich habe begonnen, mit BookStack zu arbeiten, das den Zeichensatz utf8mb4 verwenden möchte, der in der von QNAP aktuell unterstützten MariaDB-Version \[10.5.8 zum Zeitpunkt des Schreibens\] nicht verfügbar ist).

  • Wenn Ihr NAS keine produktiven oder geschäftskritischen Funktionen ausführt und es sicher ist, zu experimentieren – und Sie entweder die Erlaubnis des zuständigen Managers haben oder die Befugnis, die Arbeit durchzuführen. \[Nichts von dem, was wir tun werden, ist grundsätzlich gefährlich, aber sicher ist sicher.\]

Die zweite Frage, die wir stellen sollten, ist: Welche anderen Optionen – außer der Nutzung von ContainerStation – gibt es?

Bei meiner Recherche bin ich auf zwei Hauptalternativen gestoßen: MariaDB auf einem anderen Host betreiben; oder statt ContainerStation QNAPs VirtualizationStation verwenden. Ich möchte nicht vom Hauptthema ablenken, halte es aber für wichtig, auf diese beiden Alternativen einzugehen:

  • Ich habe mich dafür entschieden, MariaDB weiterhin auf meinem QNAP NAS zu hosten, weil mir der Schutz der Datenintegrität wichtig ist (RAID-6-Volume; meines wird von einer sehr leistungsfähigen USV betrieben) und weil jeder „zweite“ Host – egal welcher – mehr Hardware und ein weiteres Betriebssystem sowie einen weiteren Stack mit sich bringen würde, plus natürlich einen höheren Stromverbrauch.

  • Ich habe mir VirtualizationStation angesehen und bin sehr interessiert und werde weiter experimentieren. Positiv ist, dass VS mir erlauben würde, wie mit separater Hardware zu arbeiten, ohne den Overhead – und insbesondere würde es die Sicherung/Administration von MariaDB vereinfachen, ein effektiveres Schwachstellenmanagement und Updates ermöglichen… Negativ ist, dass ich das Schwachstellenproblem auch anders abmildern kann… und VS verbraucht deutlich mehr NAS-Ressourcen als ContainerStation.

Ihr Anwendungsfall wird mit Sicherheit anders – und möglicherweise einzigartig – sein. Bevor Sie also Zeit in die Umsetzung der hier beschriebenen Lösung investieren, stellen Sie sicher, dass sie für Sie die richtige ist. Denken Sie insbesondere an die Komplexität von Updates für Code, der in ContainerStation läuft. Ist Ihre Implementierung risikoreich? Dann denken Sie genau darüber nach.

Okay, falls ich Sie nicht abgeschreckt habe… los geht’s!

Wir schätzen Ihre ausführliche Darstellung wirklich sehr! Unsere Community braucht definitiv mehr hilfreiche Beiträge wie diesen.

Ich werde außerdem unser internes Team bitten, die Konfiguration basierend auf Ihrem Setup zu testen.

Nochmals herzlichen Dank für Ihren Einsatz und Ihren Beitrag!

00a. Bevor wir anfangen – Vorbereitung und Warnung

Lassen Sie uns zuerst die Warnung aus dem Weg räumen:

Hier lauern Drachen.

Eine vollständige Umsetzung dieses Leitfadens erfordert, dass Sie auf Ihr QNAP NAS per SSH zugreifen \[sowie über die Web-Admin-Oberfläche\], lokale Infrastruktur bearbeiten \[insbesondere crontab, möglicherweise lokale Freigaben\] und Software auf Ihrem NAS bereitstellen und konfigurieren.

Wenn Sie sich mit allen diesen Praktiken nicht vollständig wohlfühlen, bitte hören Sie hier auf*.*

Ich habe alle in diesem Leitfaden beschriebenen Schritte getestet… und sie funktionieren für mein persönliches Setup. Um ganz klar zu sein, die Komponenten, die ich zur Entwicklung dieser Notizen verwendet habe, sind:-

  • Ein QNAP NAS – in meinem Fall verwende ich eines meiner TVS-672XT, mit QTS 5.2.7.3256

  • Eine Desktop-Workstation – in meinem Fall ein selbstgebauter PC mit Mint Linux 21.3

  • Eine Kopie von PHPMyAdmin 5.2.1 – in meinem Fall läuft sie auf einem Raspberry Pi (4B)
    \[Es gibt keinen Grund, warum Sie z. B. MySQL Workbench anstelle von PHPMyAdmin verwenden könnten – im Grunde brauchen Sie nur einen Client, um eine Test-Datenbank zu erstellen und sie mit einer Tabelle und ein paar Dummy-Datensätzen zu füllen\].

  • Ein Nicht-“Admin”-Konto auf Ihrem QNAP NAS. Sie haben doch ein Konto, das Sie für Ihre grundlegenden QNAP-Aufgaben verwenden, oder? Sie benutzen doch nicht das werkseitige “Admin”-Konto für alles… und riskieren, ausgesperrt zu werden, falls etwas unvorhersehbar Schlimmes passieren sollte…? Nur zur Sicherheit…

  • Eine statische IP-Adresse. Wir werden unserer MariaDB-Container eine dedizierte (statische) IP-Adresse zuweisen. Das liegt daran, dass wir unsere Client-Rechner nicht neu konfigurieren möchten, falls ein DHCP-Lease abläuft und eine andere IP-Adresse vergeben wird – und natürlich, weil wir auf MariaDB von anderen Hosts im Netzwerk zugreifen möchten, nicht nur vom QNAP NAS selbst.

00b. Bevor wir beginnen – Eine Anforderung zur Datenerfassung

Stellen wir uns eine wichtige Frage: Da der ganze Sinn containerbasierter Technologie darin besteht, dass ein Container-Image in sich geschlossen ist und alles enthält, was zum Ausführen eines Programms benötigt wird, und da die Container-Grenze so konzipiert ist, dass sie nicht überschritten wird, wie genau werden wir unsere MariaDB-Daten sichern? Bisher habe ich drei mögliche Antworten auf diese Frage gefunden:

  • Sie können den gesamten Container stoppen und ihn exportieren, z. B. in eine Tar-Datei – und dann das Tar-Image in eine herkömmliche (z. B. HBS3) Backup-Lösung einbinden oder an einen anderen Ort auf einem anderen NAS oder einer externen Festplatte kopieren. Das ist absolut zuverlässig, bedeutet aber, dass alle Datenbanken, die Sie betreiben, während des Backup-Vorgangs nicht erreichbar sind – und je mehr Datenbanken und je größer deren Datenmengen, desto länger dauert die Ausfallzeit.

  • Sie können mariadb-dump-Befehle gegen Ihre laufende(n) Datenbank(en) ausführen (das dauert weniger Zeit und erzeugt kleinere Dateien), dann mit dem Befehl „docker cp“ die Extraktdatei(en) durch die Container-Grenze auf Ihr natives QTS-Dateisystem kopieren. Das ist genauso zuverlässig und potenziell ein wenig schneller, aber ein Teil des eingesparten Speicherplatzes durch die pro-Datenbank „.sql“-Dump-Dateien kann verloren gehen, weil Sie am Ende zwei Backup-Dateien haben (den Extrakt im MariaDB-Container – und den Extrakt außerhalb des MariaDB-Containers), es sei denn, Sie führen zusätzliche Aufräumarbeiten durch.

  • Schließlich können Sie – zum Zeitpunkt der Erstellung Ihres Containers, aber nur dann – eine logische und dauerhaft offene Brücke zwischen dem Container-Dateisystem und dem nativen QTS-[NAS]-Dateisystem einrichten. Dies ermöglicht es Ihnen, ähnliche mariadb-dump-Befehle wie in der zweiten Option zu verwenden, aber die Ausgabedatei kann direkt auf das native QTS-Dateisystem geschrieben werden, ohne dass eine lokale Kopie im Container erstellt und dann per „docker cp“ über die Container-Grenze kopiert werden muss. Kurz gesagt, dies ist die technisch einfachste Lösung, aber sie schafft eine dauerhaft offene „Brücke“ zwischen den beiden Dateisystemen.

Offensichtlich kann ich diese Entscheidung nicht für Sie treffen. Aber wenn wir die dritte Option wählen wollen – meine persönliche Wahl – dann müssen wir Informationen über das tatsächliche Dateisystem innerhalb eines installierten MariaDB-Containers erhalten, damit wir einen Verbindungspunkt für unsere Dateisystem-„Brücke“ kennen, und wir benötigen diese Information bevor wir unseren MariaDB-Container erstellen! Um das zu tun, müssen wir „in“ den offiziellen MariaDB-Container schauen – und ich habe zwei mögliche Wege gefunden, dies zu erreichen, aber nur einer hat funktioniert.

Die nicht funktionierende Methode [Sie dürfen gerne experimentieren] ist, ein Skript zu verwenden, das die Docker-API implementiert und damit das Image extrahiert. Hier ist ein Link zu einem, das ich ausprobiert und nicht zum Laufen gebracht habe und das die Docker-API verwendet, um ein Docker-Image auf Ihr lokales Dateisystem herunterzuladen, ohne dass Docker installiert sein muss. Vielleicht haben Sie mehr Erfolg als ich…

Meine Lösung umfasst ein paar mehr Schritte, ist aber einfach und zuverlässig: Führen Sie eine Pilotinstallation von MariaDB aus Docker durch; erkunden Sie das installierte Image, um die benötigten Informationen zu erhalten; deinstallieren Sie dann das Image und führen Sie eine saubere Installation durch – diesmal mit den Parametern, die wir beim Erstellen des Containers einbinden möchten.

Ehrlich gesagt, wenn Sie sich durch die Anfangsschwierigkeiten einer 3rd-Party-Skriptlösung gekämpft haben, können Sie genauso gut eine „Pilot“-Bereitstellung direkt von Docker Hub durchführen. Sie entscheiden.

Bitte beachten Sie, dass Sie, sobald Sie mit ContainerStation Ihren Container erstellt haben, nur durch Löschen und erneutes Anlegen des Containers zur dritten Option wechseln oder davon zurückkehren können. Nehmen Sie sich also einen Moment Zeit für eine informierte Entscheidung…

Der Rest dieser Anleitung behandelt alle drei Optionen, also achten Sie bitte besonders darauf, wenn sie besprochen werden.

01. Auswahl der richtigen MariaDB-Container

Es wird wahrscheinlich niemanden überraschen, dass das MariaDB-Team ein Container-Image für jede unterstützte Version ihres Produkts bereitstellt. Das wirft drei wichtige Fragen auf, die wir beantworten müssen, bevor wir loslegen können:

  • Wie können wir sicherstellen, dass das Docker-Image von MariaDB, das wir installieren möchten, eine offizielle Datei ist und keine böswillig veränderte Kopie?

  • Gibt es eine bestimmte Version von MariaDB, die wir tatsächlich benötigen zu installieren?

  • Sobald wir festgelegt haben, welche Version von MariaDB wir möchten, wie teilen wir ContainerStation mit, welche Version wir wollen, damit auch wirklich die richtige Version bereitgestellt wird?

Die erste Frage lässt sich am einfachsten beantworten: ContainerStation ist fest darauf programmiert, alle Docker-Image-Dateien direkt von „hub.docker.com“, dem offiziellen Docker-Repository, zu beziehen. Wenn Sie ContainerStation diesbezüglich nicht vertrauen möchten, dann schlage ich mit allem Respekt vor, dass Sie hier aufhören zu lesen, da die Beantwortung dieser Bedenken den Rahmen dieser Anleitung sprengt.

Die zweite Frage kann ich Ihnen nicht wirklich beantworten, da dies ganz von Ihren Anwendungsfällen abhängt. Ich kann jedoch ein paar Tipps geben. Wie wir gleich sehen werden, haben die Verantwortlichen für die MariaDB-Images zwei speziell benannte Images erstellt: „mariadb-latest“ und „mariadb-lts“, wobei „lts“ für „Long Term Support“ (Langzeitunterstützung) steht. Wenn Sie entweder die aktuellste stabile Version oder eine mit erweitertem Support benötigen, sollten Sie eines dieser beiden Images auswählen.

Um die Verfügbarkeit bestimmter (und offizieller!) MariaDB-Images zu prüfen, öffnen Sie zunächst einen Tab in Ihrem Browser und navigieren Sie zu „https://hub.docker.com/“. Falls die URL im vorherigen Satz ein aktiver Hyperlink ist, überprüfen Sie bitte unbedingt die Adressleiste Ihres Browsers und das Zertifikat der Seite, um sicherzugehen, dass Sie sich auf der offiziellen Docker-Seite befinden. Dort gibt es zwei Wege zu den benötigten Daten.

Der erste besteht darin, am linken Seitenrand der Startseite nachzusehen. Im Abschnitt „Trusted content“ (Vertrauenswürdige Inhalte) sollte ein Link mit dem Titel „Docker Official Images“ erscheinen. Wenn ich diesem Link im November 2025 folge, gelange ich auf eine „Suchergebnisse“-Seite, die mit „1 – 30 von 178 verfügbaren Ergebnissen“ beginnt – und das MariaDB-Image befindet sich in der 6ten Zeile. Alternativ können wir auch einfach die Suchleiste der Webseite (im horizontalen oberen Menü/Navigationsleiste) nutzen und „MariaDB“ als Suchbegriff eingeben.

Sie werden feststellen, dass es tatsächlich mehrere verschiedene MariaDB-Pakete (zum Beispiel sehe ich „mariadb“, „mariadb/maxscale“ usw.) auf Docker Hub gibt. Wir müssen das erste auswählen, „mariadb“. Es ist leicht zu erkennen: Die Robbe im Logo ist braun gefärbt (statt nur schwarz umrandet) und rechts neben dem Namen „mariadb“ befindet sich ein kleines blau-grünes Abzeichen sowie die Kennzeichnung „Docker Official Images“. Zum Zeitpunkt der Erstellung dieses Textes zeigt das erste Metadatum („Pulls“) an, dass es bereits mehr als 1 Milliarde Mal heruntergeladen wurde. Das ist das Paket, das wir wollen.

Klicken Sie auf den Namen – der Link führt Sie zu einer Seite mit detaillierten Informationen zu allen verschiedenen Release-Versionen dieses „Haupt“-MariaDB-Images. Direkt unter der Seitenüberschrift sollten zwei Tabs erscheinen: „Overview“ und „Tags“.

Falls nicht standardmäßig ausgewählt, klicken Sie auf „Overview“ und beachten Sie einen Block mit über 60 Hyperlinks zu „Supported tags and respective Dockerfile links“. Wenn Sie genau hinschauen, sollte einer der Einträge in dieser Tabelle immer „latest“ und ein anderer immer „lts“ (für Long Term Support) sein. Beachten Sie, dass es für die „LTS“-Variante wahrscheinlich 3 oder 4 Versionen auf dieser Seite gibt, die „lts“ als Teil ihres Namens haben. Nur eine Datei sollte schlicht „lts“ heißen, ohne weiteren Zusatz. Wenn Sie also „Strg-F“ zur Suche verwenden, drücken Sie so oft „Weiter“, bis Sie die richtige Version gefunden haben. Je nach Bedarf wählen und klicken Sie auf einen der Links auf dieser Seite – es muss nicht „latest“ oder „lts“ sein, wenn Sie eine bestimmte Version der Software benötigen. Die Liste ist so sortiert, dass die neuesten/modernsten Versionen zuerst erscheinen, ältere Ausgaben in umgekehrter chronologischer Reihenfolge. (Nebenbei bemerkt: Die „aktuelle“ von QNAP unterstützte Version – 10.5.8 – ist bereits aus der Liste herausgefallen… Gut, dass wir Docker als Option haben!)

Zum Zeitpunkt der Erstellung dieses Textes werde ich beim Klick auf „latest“ auf eine GitHub-Seite weitergeleitet, die eine rohe Docker-Konfigurations-/Manifestdatei für das Image enthält. Sie können dann auf dieser Seite eine Textsuche (Strg-F im Browser) mit dem Begriff „version“ durchführen. Im Idealfall wird Ihr Cursor dabei einen Textblock mit der Überschrift „# OCI annotations to image“ hervorheben – und in diesem Block finden Sie einen Parameter mit einem Wert ähnlich wie diesem:

org.opencontainers.image.version=“12.0.2” \

Daraus können wir ableiten, dass „mariadb:latest“ (derzeit) die Version 12.0.2 der Datenbank installiert. Notieren Sie sich das – wir können später überprüfen, ob das wie erwartet funktioniert. Natürlich können Sie, falls Sie eine andere Version benötigen/möchten, auch eine der explizit „versionsgestempelten“ Alternativen auf der vorherigen „Overview“-Seite bei DockerHub auswählen und mit dem oben beschriebenen Validierungsschritt sicherstellen, dass das Manifest in Ihrem gewählten Paket der gewünschten Version entspricht. Ich sollte an dieser Stelle auch erwähnen, dass es zwar noch andere Docker-Repositories im Internet gibt und ContainerStation es ermöglicht, lokal heruntergeladene und zwischengespeicherte Container zu importieren, aber eingangs hatten wir uns vorgenommen, zu klären, wie wir sicherstellen, dass wir legitimen Code und keine Malware herunterladen.

Das ist die Antwort auf diese Frage: Wir nutzen den Importmechanismus von ContainerStation [der fest auf DockerHub eingestellt ist] und haben überprüft und sichergestellt, dass wir dabei ein offizielles MariaDB-Image aus diesem Repository beziehen.

Der entscheidende Punkt ist, dass der exakte Text der auf der vorherigen Seite gelisteten „Tags“ das Element ist, das wir ContainerStation mitteilen müssen, um anzugeben, welche Version von MariaDB wir installieren möchten. Wie das funktioniert, sehen wir gleich.

02. Installieren Sie ContainerStation aus dem QNAP App Store

Greifen Sie über die Web-Admin-Oberfläche auf Ihr QNAP NAS zu. Nachdem Sie sich authentifiziert haben, suchen Sie die Anwendung „App Center“ – diese ist höchstwahrscheinlich entweder an Ihrem Desktop angeheftet oder über das „Hauptmenü“ zugänglich, das im Fall von QTS 5.2.7 als Symbol oben links in der Web-Admin-Oberfläche erscheint – es sieht aus wie drei horizontale Balken.

Nachdem Sie „AppCenter“ geöffnet haben, klicken Sie im linken Seitenrand auf „Dienstprogramme“ und suchen Sie dann nach „Container Station“ [standardmäßig sind alle einzelnen Apps in jeder Kategorie alphabetisch sortiert].

Klicken Sie auf die blau-weiße Schaltfläche, um zu „Installieren“.

Ganz einfach.

Es sollte einige Minuten dauern, den Code herunterzuladen und zu installieren [abhängig von Ihrer Netzwerkgeschwindigkeit]. Sobald die Installation abgeschlossen ist, wechselt die Aktivierungsschaltfläche von blau-weiß „Installieren“ zu weiß-blau „Öffnen“.

03. ContainerStation-Erststart und Auswahl des Datenvolumens

Haftungsausschluss – Ich kann Ihnen hier keine expliziten Anweisungen geben, da die konkreten Schritte von der zugrunde liegenden Konfiguration des QNAP NAS abhängen, auf dem Sie ContainerStation installieren, sowie davon, wie es hinsichtlich Volumes, LUNs (Logical UNits), usw. eingerichtet wurde.

WICHTIG: Wenn Sie sich bezüglich der Konfiguration Ihres NAS nicht sicher sind, gehen Sie bitte zunächst in die „Systemsteuerung“ und suchen Sie in der Gruppe „System“ nach einem Applet namens „Speicher & Snapshots“. Hier sollten Sie eine Übersicht über die grundlegende Konfiguration Ihres NAS finden, die beim ersten Hinzufügen der Laufwerke und der Ersteinrichtung festgelegt wurde. In meinem Fall habe ich ein einziges Volume, fantasievoll „DataVol1“ genannt, welches ein RAID6-Array über 6 x WD Red 12TB-Festplatten ist. Wenn Sie „Speicher & Snapshots“ prüfen und dort etwas anderes als ein einzelnes Volume sehen, würde ich Ihnen dringend empfehlen, die Person zu fragen, die Ihr NAS eingerichtet hat, wo Sie den Ordner „/Container“ am besten speichern sollten. Sie müssen die voraussichtlichen Anforderungen an den Speicherplatz bedenken, insbesondere da wir eine Datenbank-Engine installieren werden, die möglicherweise sehr hohe Speicheranforderungen hat. Stellen Sie sicher, dass Sie wissen, wo Sie „/Container“ installieren sollten, bevor Sie diesen Schritt fortsetzen.

Starten Sie ContainerStation, indem Sie auf das Symbol klicken. Sie sollten ein „Willkommen“-Banner sehen, darunter folgenden Text:

Willkommen bei Container Station

Container Station erstellt standardmäßig einen freigegebenen Ordner namens „Container“ in File Station, um alle Images und Container zu speichern.

Unter diesem Text sollte Ihnen ein Kombinationsfeld (Drop-down) angezeigt werden, das standardmäßig auf „/Container“ eingestellt ist, und darunter befindet sich eine Schaltfläche „Start“. Mein NAS ist mit einem einzigen Volume konfiguriert und dies ist die Auswahl, die mir angeboten wird (weil ich keine Alternative habe). Wie oben erwähnt, wenn Sie mehrere Volumes auf Ihrem NAS eingerichtet haben, wird Ihnen hier sicherlich etwas anderes angezeigt. Entschuldigung, falls das bei Ihnen der Fall ist – diesen Teil müssen Sie selbst herausfinden. Sobald Sie den korrekten Speicherort für den freigegebenen Ordner festgelegt haben, klicken Sie auf „Start“ und lassen Sie das Skript bis zum Ende durchlaufen.

Ich möchte anmerken, dass in meinem Fall, da das ausgewählte Volume das Hauptdatenvolume des NAS ist, ContainerStation die Möglichkeit hat, beliebig groß zu werden. Das kann gut sein, aber auch ein Risiko darstellen – abhängig von der Zuverlässigkeit des Codes, den Sie in den gehosteten Containern ausführen, und der Möglichkeit, dass dieser große Mengen an Speicherplatz verbraucht, z. B. durch das Schreiben extrem langer Logdateien ohne automatischen Bereinigungsprozess. Überlegen Sie sich bitte kurz Ihre geplanten Einsatzzwecke, bevor Sie entscheiden, wo Sie die „/Container“-Freigabe anlegen.

Bei meiner Einrichtung von ContainerStation wurde ich gefragt, ob ich zustimme, dass Nutzungsdaten gesammelt und an QNAP gesendet werden. Das ist keine technische Frage, die ich für Sie beantworten kann. Beachten Sie jedoch, dass, falls Ihr QNAP Ihrem Arbeitgeber gehört, die Entscheidung möglicherweise nicht bei Ihnen liegt.

OK, zu diesem Zeitpunkt ist ContainerStation installiert, konfiguriert, leer, aber verfügbar. Beim Start sollten Sie standardmäßig eine „Startseite“ mit dem Titel „Übersicht“ sehen, mit einer Aufschlüsselung von Containern, Anwendungen und NAS-Ressourcen – CPU, Arbeitsspeicher und den „Top 5 nach CPU-Auslastung“-Containern. Das sollte zu diesem Zeitpunkt alles schön ruhig sein.

04. Erstellen unseres MariaDB-Containers

An diesem Punkt gehe ich davon aus, dass du direkt mit dem Erstellen eines MariaDB-Containers fortfahren möchtest… aber wahrscheinlich hast du vorher noch ein paar Fragen.

  • Moment – warum müssen wir überhaupt einen Container erstellen? Der ganze Sinn ist doch, dass wir eine vorgefertigte Instanz von MariaDB ausführen, oder?

    Gute Frage. Ich bin kein Experte für die Feinheiten von Docker, aber mein grundlegendes Verständnis ist, dass wir einen lokalen (leeren) Container erstellen und ihn dann mit einem offiziellen MariaDB-Image befüllen, das wir vom offiziellen Docker Hub herunterladen.

  • Moment – ich habe auf {füge hier eine Tech-News-Webseite deiner Wahl ein} gelesen, dass bis zu 20 % der öffentlichen Docker-Bibliotheken Images mit Malware wie Bitcoin-Minern enthalten. Woher weiß ich, dass du mich nicht gerade dazu bringst, eine Menge Malware zu installieren, die du gerade hochgeladen hast?

    Noch bessere Frage. Das zeigt, dass du das Thema mit einem sicherheitsorientierten Ansatz angehst. Die Antwort ist ziemlich einfach – wir geben ContainerStation den Namen der Image-Datei an, die wir abrufen möchten, aber es wird direkt auf das Standard-Docker-Repository zugreifen, anstatt uns nach der URL des Images zu fragen. Durch diesen Mechanismus kannst du ziemlich sicher sein, dass wir ein legitimes Image herunterladen.

Oben rechts im ContainerStation-Fenster solltest du ein Kombinationsfeld mit weißem Text auf blauem Hintergrund und dem Standardlabel „Explore“ sehen. Klicke auf den Abwärtspfeil, um das Dropdown zu öffnen, und wähle im Menü die erste Option „Container erstellen“ aus.

Ein Popup-Fenster mit dem Titel „Container erstellen“ sollte erscheinen, wobei Tab 1 von 3 als „Image auswählen“ markiert ist. Im Hauptbereich des ersten Tabs befinden sich 3 Steuerelemente – ein Paar Optionsfelder zur Auswahl zwischen Basis- und erweitertem Modus, ein Kombinationsfeld mit der Bezeichnung „Registry“ und ein Textfeld namens „Image“.

Stelle zuerst den Modus auf Erweitert um. Wir müssen die erweiterten Einstellungen nutzen, um MariaDB beim Start Laufzeitparameter zu übergeben. Wenn du die Änderung vornimmst, wird das „Registry“-Kombinationsfeld durch zwei weitere Optionsfelder ersetzt: „Docker-Image“ und „LXD-Image“. Belasse die Auswahl auf „Docker-Image“ (da wir eine Docker-Datei bereitstellen). Beachte, dass der graue Text im „Image“-Feld „registry/image:version“ lautet – und der „:version“-Teil ist sehr wichtig, wie wir gleich sehen werden.

Das Optionsfeld „Docker-Image“ weist das Skript im Wesentlichen an, Docker Hub als Quelle für die Image-Datei zu verwenden, und das Textfeld „Image“ ist der Parameter, den wir angeben müssen, um dem Installationsskript mitzuteilen, welches Paket und welche Version dieses Pakets wir installieren möchten.

Hier gibst du den Namen der relevanten Image-Datei an, die wir bei der Suche auf Docker Hub identifiziert haben. In meinem Fall war der Wert für das „Image“-Feld zum Beispiel mariadb:latest.

Wenn du jedoch eine Anwendung betreibst, die eine bestimmte Version benötigt, gibst du hier die gewünschte Edition an. Zum Zeitpunkt dieses Textes unterstützt die Webanwendung NextCloud beispielsweise Release 31.0.10 und ihre internen Infrastruktur-Prüfungen empfehlen, dass sie am besten auf „MariaDB >=10.6 und <= 11.4“ läuft. Wenn ich also NextCloud hosten möchte, würde ich den Wert „mariadb:11.4“ oder vielleicht „mariadb:11.4.9“ verwenden.

Nachdem du die gewünschte Version angegeben hast, klicke auf „Weiter“ [unten rechts im Fenster]. Daraufhin sollte der Installer kurz ein Pop-up-Banner mit „Informationen werden abgerufen“ anzeigen – er validiert die von uns angegebenen Details, indem er nach diesem Image bei DockerHub sucht.

Das Fenster sollte nun von „1. Image auswählen“ zu „2. Container konfigurieren“ gewechselt haben und es erscheinen eine Reihe neuer Felder, die ausgefüllt werden müssen.

Das erste davon ist „Name“. Das ist der menschenlesbare Name, den wir diesem Container geben, der in der neuen, lokalen „ContainerStation“-Umgebung läuft, die wir gerade installiert haben. Hier solltest du dir etwas überlegen – ein Name wie „Xb17-123f“ hilft dir später wenig weiter. Wenn dies dein erster Container ist, du aber mehrere haben wirst, empfehle ich, eine Namenskonvention zu etablieren. Hier sind einige Elemente, die du in ein strukturiertes Namensschema aufnehmen könntest:

  • Container-Inhalt – wenn du mehrere verschiedene Software-Stacks betreibst – MariaDB, OpenLDAP, Jupyter, Plex, RStudio usw. – solltest du „MariaDB“ oder Ähnliches im Namen aufnehmen.

  • Container-Zweck – ist dies ein [D]evelopment-Container für Entwickler, ein [T]est-Container für Vorab-Validierung und Benutzertests, eine [P]roduktionsumgebung oder vielleicht sogar eine [C]ontingency- oder [B]ackup-Instanz für Notfälle? Ein einstelliger Buchstabe macht es leicht, den Zweck auf einen Blick zu erkennen.

  • Inhaltsversion – wenn du, wie ich, dieser Anleitung folgst, um Zugriff auf eine neuere Version von MariaDB zu erhalten als die, die mit QTS ausgeliefert wird, könntest du den Namen auf MariaDB_P12-0-2 oder ähnlich anpassen.

  • Du kannst dedizierte Container für bestimmte Anwendungen bereitstellen – dann hast du z. B. einen MariaDB-Container, der nur eine Anwendung unterstützt, in diesem Fall würde der Name der App enthalten sein, etwa MariaDB_NextCloud oder MDB_NC.

  • Bedenke abschließend, dass du den gewählten Namen exakt in „docker“-Befehle an der Shell eingeben musst, um Docker mitzuteilen, auf welchen Container sich deine Anweisungen beziehen. Mache es also nicht zu kompliziert, da du ihn ziemlich oft tippen wirst.

Wie man so schön sagt: „Du machst dein Ding“, aber nimm dir bitte einen Moment, um darüber nachzudenken.

Als Nächstes folgt die „Neustart-Richtlinie“ – mit den Optionen „Keine“, „Immer“, „Bei Fehler“ und „Sofern nicht gestoppt“. Die Standardeinstellung ist „Sofern nicht gestoppt“ und die Bedeutung der Optionen sollte selbsterklärend sein. Ich habe die Standardeinstellung beibehalten. Hier ist ein Link zur offiziellen Docker-Dokumentation, falls du mehr erfahren möchtest.

Jetzt kommen wir zur „Netzwerkkonfiguration“ – und das ist eine wichtige Einstellung, die leicht zu Verwirrung führen kann, daher lohnt es sich, hier etwas genauer hinzusehen. Auf dem Bildschirm ist das Feld „Exponierte“ Ports mit hoher Wahrscheinlichkeit auf „3306/tcp“ voreingestellt und ausgegraut, obwohl weiter unten auf der Seite eine Option zum Festlegen eines „Container-Ports“ besteht, der ebenfalls auf den Wert 3306 voreingestellt ist [der Standard-TCP-Port für MariaDB/MySQL].

Der Haken ist folgender… Wenn du diesen Wert auf einen nicht standardmäßigen Port für MariaDB änderst, kannst du deinen Container zwar starten, aber du wirst dich fast sicher nicht über das Netzwerk mit deiner Datenbank verbinden können. Das liegt daran, dass die eigentlichen MariaDB-Binärdateien andere Konfigurationsdateien verwenden – die im Container-Image eingebettet sind – und möglicherweise nicht das übernehmen, was du hier einstellst. [Haftungsausschluss – bei mir war es so!] Sei vorsichtig beim Ändern dieses Wertes – und siehe weiter unten, wie du prüfen kannst, auf welchem Port dein laufender MariaDB-Binary tatsächlich lauscht. Solange du deinem Container eine eigene IP-Adresse zuweist und den MariaDB-Standardport 3306 verwendest, sollte es kein Problem geben.

Klicke noch nicht auf „Weiter“ – es gibt noch mehr zu tun…

05. Advanced Container Settings

Before we leave this page, we need to dig a bit deeper. Click on “Advanced Settings”, which you will find below the “Network Configuration”.

In this lowest level of detail, you should find a page broken down in to 7 vertically stacked tabs, named: Commands, Networks, Environments, Labels, Storage, Runtime and Resources.

Let’s now work through each of these in turn:-

Commands
Leave the “Command” and “Entrypoint” text boxes in their “default” settings, and make sure that the “Allocate interactive processes (-i) for the container” and “Allocate TTY prcoesses (-t) for the container” are both set to active. We are going to rely on these two parameters being set ‘on’ when we come to set up and manage the container once it’s running.

Networks - IMPORTANT
In my case I wanted to access this container via the default [10Gb] network port on my NAS… but if you have a model with multiple network ports and connections, this is where you can specify which of the network ports on your NAS that your Docker container should be visible to your network.

The “Preparation and Warning” notes at the beginning of this guide included a requirement for a static IP address, valid on the local network – and this is where that value will be used.

Change the ‘Network Mode’ radio button selector from “Default (NAT)” to “Custom”. Allow the drop-down Combo Box to remain in “bridge”, then scroll the window down to reveal a couple of additional parameters tucked away at the bottom.

One of these is a check-box with the label, ‘Use a static IP address’. Activate that check-box and the installation window will change to give a 3-row data box with ‘IP address’, ‘Subnet mask’ and ‘Gateway’ as labels for the 3 rows. You will hopefully find that the Subnet mask and Gateway are pre-populated and greyed out – this data is sourced from the main network configuration parameters of your NAS. You should also find out that some of the 4 digits of your IP address – specifically the network address portion are also pre-defined and greyed out. In my case I am using a Class B network with network address 172.16.0.0, so I have just 2 parameters to fill in. Update the values in the “IP address:” parameter to match the address you previously obtained.

{{ Edit to Notes - Added April 3rd, 2026 }}

There’s a non-obvious but critical consequence of the decision you make here regarding whether to explicitly identify IP Addresses for DNS Servers or whether you are happy to allow the container to simply adopt the default DNS values set at your NAS/host level.

Suppose there is a future time where you need to make changes to your local DNS infrastructure and further suppose that those changes require you to amend the IP addresses for your DNS Servers on your network. If you create a new container with the DNS Server IP addresses set to “NAS Values”, then when you need to come to change to a new DNS host IP address, the only way you can do this is at the Host NAS Level. Under the hood, Docker provides a DNS proxy service to running containers. It uses a hidden IP address (127.0.0.11) and the DNS resolver details in containers will be set to this value.

The consequence here is that if you use “host based DNS” in this way, then when you come to change your DNS host value, you have given yourself no option except to migrate ALL your containers at the same time.

Conversely, if you explicitly set your DNS Server IP Addresses manually at this step in the process, then you grant yourself the ability to migrate “one container at a time” to a different IP address, and/or set different containers to use different DNS Servers [should you have that requirement].

The catch here - something that is not obvious at container creation time, is that once you create your container, your DNS decisions are “hard-coded” and cannot be changed.

Does this matter? Well, only you can answer that question. But if, say, you have a mix of “Production” and “Test” containers running in a single Docker instance [which, if you’re limited with respect to hardware, is a perfectly reasonable approach], then you’re going to be forced to migrate both test and production environments at the same time. That seems a bit counter-intuitive.

Take a moment to ensure that you have this configured in a way that is appropriate for your environment and make sure to document what you have done and why.

{{ End of Edit }}

Environments – CRITICAL
You can think of this element as for the specification of environment [run time] variables that the container is going to pass to MariaDB as/when MariaDB starts up. The values of these variables are essentially secure – as they are only visible here and inside the container itself, but they are critical.

That’s because you must provide a root password to the docker image of MariaDB as part of the initial configuration. To do this, click the “Add New Variable” button at the top right corner of the page in this tab. The name of the environment variable we have to create is “MARIADB_ROOT_PASSWORD” and the value we select should be something that conforms to conventional password rules. If you miss this step, your Container will not start. [OK, disclaimer. I just exaggerated when I said that you must provide a root password here. That’s not strictly true. One of the other support options is “allow no password”. I chose to write the instructions as I did above because I don’t want to encourage anyone to do anything that is insecure. The right action to take here is to use a generator to produce a secure password and use that. Please take a moment to reflect on the sensitivity of the data your DB will host and the environment in which your NAS operates. As I’ve noted before: “You do you”.

Labels
We’re going to leave the settings of this tab to their default values

Storage – IMPORTANT
In the section of this document with the title, “00b. Before We Get Started – A Data Gathering Requirement”, we considered the question of whether or not we want to create a permanent connection between the container’s internal file system and that of the NAS itself. This is where you get to decide which approach you will take.

If you’re currently performing a “pre-install” for “Option 3”…
– that is to say, deploying the MariaDB container so that you can jump in and have a look around, so that you know where to make a connection to your NAS file system, or if you’ve decided that you want to keep your MariaDB container completely isolated, you can skip Storage and leave it blank – simply jump down these notes to “Runtime” and continue.

If you’re currently performing the “second/full/final install” for “Option 3”…
– and/or you have otherwise determined the location of a folder within the MariaDB container that you wish to permanently “bridge” to the QTS file system, this is where you make that configuration. Please note: you can only make this decision at installation time – once “built” you cannot go back and edit this part of your container’s configuration. Whatever you decide here will be “final” for this particular container.

After selecting the “Storage” tab, click the “down arrow” to the right of the button labelled “Add Volume”. A pop-up window should appear below the button with three options in it – “Add Volume”, “Add Volume from Container” and “Bind Mount Host Path”. Select “Bind Mount Host Path” and note that a second “bind pair” appear in the main section of the window. This one will be differentiated with a small yellow “folder” icon – which signifies that it related to a folder native to QTS on the NAS. Click on the yellow folder icon and use the window which shows a path to actual, existing folders on the host NAS file system. Navigate through the file system until you select the remote endpoint that you want to be able to connect to from within your container. Ideally, you should make sure that the folder you select is part of an existing backup regimen – for example is enrolled within one of your existing HBS3 backups. Of course, you don’t need to have the QTS folder enrolled in an HBS3 backup before you add a MariaDB container, it’s just that if you want your exported .sql files to be archived, including the destination QTS folder in an HBS3 backup is the simplest way to do it.

Click in to the final data field, “Container:” and provide the path name to the location within the container on which we wish to mount the remote file system. (For users familiar with the soft-link operation of Linux, using the command “ln -s”, this is effectively the same thing). In our case, because our future selves were so helpful, we know that the internal folder we want to use is /var/backups. [Warning: if you’re reading this and preparing any version of MariaDB that is not 12.0.2, you really should be ignoring this hint and performing your own pre-install to check. Just saying].

Runtime
This tab controls the way that ContainerStation will spawn threads that execute the code in containers. Because ContainerStation is designed to operate three different types of container, this tab allows an administrator to help ContainerStation better understand how to interact with the executable code within. As we’re using a Docker image, we can let this remain with default values.

Resources
This tab allows you to decide whether you want to apply “upper limits” to the amount of hardware resource you are willing to allow this specific container to consume. It is likely to be very useful on larger NAS units and those with many users, because you probably don’t want one container to draw down all the available performance of the NAS. However, since this is going to be specific to your operating environment, there is no easy or obvious suggestion to make here. MariaDB recommend a minimum of 1Gb of RAM for basic operations. Stipulating CPU limits is going to be much harder, because different NAS models will have different CPUs installed.

If in doubt… either seek advice from an administrator, or try this as a rule-of-thumb… If you switch to “Limited” for any of the 3 options, the range of values will be pre-set based on your local hardware. Have a think about the range of users, workload and other applications running on the NAS in question and think about how much of the available performance you would be comfortable allocating to this one solitary container if it was “working hard”. In my case – a TVS-672XT used as a “home office” hub, I set limits at 25% of available resources across the board – and that has proven to be more than enough. Doing so gives me the confidence that even if my MariaDB container were to “go sideways” with a looping process, it will not kill my entire NAS – and, crucially, it will leave me with enough capacity/bandwidth to get in and figure out what is going wrong.

When you’re ready, click Finish.

In the background, ContainerStation will now download the “Mariadb:Latest” image from Docker Hub and then apply the various configuration parameters that we specified during the “create” process.

If we switch from the “Overview” tab of ContainerStation’s main display to “Containers” [via the left-side gutter margin], we should now see a single row in the main panel of the page, with a “Type” value of “Docker”, a “Name” value that matches the one provided earlier, and additional parameters – “Status”, “Application”, “Image”, “IP Address”, “Created On” and “Actions”.

At the bottom of the display we should also see a pair of tabs, “Logs” and “Status”.

If everything went [reasonably] well, then in the “Status” column of the table of containers, we should see a circular green icon and “Running”. Earlier in these notes, I mentioned that there was a way of checking to find out which TCP port our Docker instance of MariaDB was listening on – and this is it. Click on the “Logs” tabs and you should see a window with a black background and fairly small white text. Directly above the top right corner of this text window, you’ll see a small icon that looks like a square with an arrow pointing out of it towards the top, right corner. Click that arrow and the log window will expand to fill your browser. Unfortunately the content of this window isn’t rendered as HTML, so you can’t use “Ctrl-F” in your browser to search for the active port, but it should not be hard to find. In my case, the log contains the following:-

2025-11-06 7:59:15 0 [Note] Server socket created on IP: ‘0.0.0.0’, port: ‘3306’.
2025-11-06 7:59:15 0 [Note] Server socket created on IP: ‘::’, port: ‘3306’.

As I noted previously, when I tried to change the port via the Container setup options, I found that the value here remained stubbornly at port 3306. Eventually, I decided it wasn’t an issue since I was of course using a dedicated, static IP address and this was the only service the address would be likely to host. But I did say I would show you how to confirm the port that your MariaDB daemon is listening on and, well, this is it.

But: congratulations! You’ve just configured and installed MariaDB in Container station!

And it is currently absolutely useless!

Right now, all we’ve done is get the package downloaded and installed and got the main binary to successfully start executing. However, by default MariaDB won’t allow network connections and is supplied with just a single root/admin user. Now we need to perform a couple of very simple validation tests. The first is a simple network visibility test – just open a command prompt or shell prompt (from your workstation) and then issue the command,

ping {IP address}

where the {IP address} is the one that we applied to the container in the “Networks” tab of “Advanced Settings” and was based on the static IP address we obtained at the start of this guide. If we got our networking setup correct, we should see ICMP Echo packets returned to our workstation.

The second test, which is very helpful if you have the means to run it, is to perform an nmap scan. Nmap is a port scanning utility that can access a remote host and tell you whether or not the host is offering service for particular ports, such as TCP sockets. If your workstation is Windows based, you can download the nmap utility direct from the official Nmap web site . If your workstation is unix based, such as one based on GNU/Linux, you can almost certainly add the nmap utility direct from your local package manager.

Once you have the utility installed, simply check your container’s IP address. For example, I assigned the IP address 172.16.101.201 to my MariaDB container and when I run nmap against that IP address, this is returned:-

$ nmap 172.16.101.201
Starting Nmap 7.80 ( link to official nmap web site normally appears here ) at 2025-11-06 08:25 GMT
Nmap scan report for 172.16.101.201
Host is up (0.00012s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
$

In this case I have only one open/active port at the IP address, but it shows that TCP Port 3306 is open (which means that a listener is monitoring the network stack and will respond to packets with that port ID) and we can also see that the listener is “mysql” – which is what we want.

This gives us a good level of confidence that our MariaDB engine is at least installed and running.

06. Zugriff auf Docker über SSH

Wie jeder, der mit MariaDB vertraut ist, weiß, folgt es dem Prinzip secure by design (sicher durch Design). Das bedeutet, dass beim ersten Start nur ein einziger, registrierter Benutzer vorhanden ist und kein Remote-Zugriff (d. h. Netzwerkzugriff) erlaubt wird. Wir müssen also nicht nur über den lokalen Host darauf zugreifen, um es korrekt zu konfigurieren, wir müssen sogar von innerhalb des Docker-Containers darauf zugreifen.

Los geht’s.

Öffne zunächst eine Secure Shell-Sitzung zu deinem NAS. Dafür gibt es verschiedene Möglichkeiten – sowohl Windows (über die Eingabeaufforderung) als auch Linux (über eine Terminal-Sitzung) erlauben es dir, einfach den Befehl einzugeben:

SSH {deine NAS-IP oder DNS-Name}

Alternativ kannst du eine Client-Anwendung wie PuTTY verwenden – ein kostenloser SSH- und Telnet-Client für Windows und Linux. Mach es so, wie es für dich am besten passt. Sobald du eingeloggt bist und sich am \[NAS\]-Shell-Prompt befindest, gib folgenden Befehl ein:

docker ps

Du solltest diesen Befehl nicht mit „sudo“ voranstellen müssen, aber das kann von den Berechtigungen deines Nicht-Admin-Kontos abhängen, mit dem du auf dein NAS zugreifst. Als Antwort auf diesen Befehl solltest du eine zweizeilige Ausgabe mit einigen Basisinformationen unter den Spaltenüberschriften „CONTAINER ID“, „IMAGE“, „COMMAND“, „CREATED“, „STATUS“, „PORTS“ und „NAMES“ sehen.

Die einzelne Detailzeile unter den Überschriften bezieht sich auf den Container, den wir gerade erstellt haben. Notiere dir den Eintrag unter „NAMES“ – das ist der spezifische Containername, und den benötigen wir, um mit unserer MariaDB-Instanz zu interagieren. Er sollte mit dem Namen übereinstimmen, den du bei der Erstellung des Containers vergeben hast.

07. Zugriff auf das Dateisystem von MariaDB, um einen Endpunkt für die Ordnerverknüpfung zu finden
Wenn Sie MariaDB zum ersten Mal installiert haben und Ihr Ziel darin besteht, herauszufinden, welcher Ordnerknoten im Dateisystem des Containers als Parameter in der oben beschriebenen Storage-Konfiguration verwendet werden kann, ist das Erlangen der benötigten Information denkbar einfach. Zunächst müssen wir eine interaktive Bash-(Shell-)Sitzung starten, um in den Container zu springen. Sie müssen dazu einen Docker-Befehl über die aktive SSH-Sitzung zu Ihrem NAS eingeben. Da diese Methode eine gängige Möglichkeit ist, mit Docker zu interagieren, nehmen wir uns einen Moment Zeit, um den Befehl aufzuschlüsseln und zu verstehen, was die einzelnen Elemente bedeuten. Lesen Sie die Erklärung durch, bevor Sie ihn eingeben:

sudo docker exec -it {IhrContainerName} /bin/bash

In der obigen Befehlszeile:

sudo – weist das NAS QTS Betriebssystem an, den folgenden Befehl mit Superuser-Rechten auszuführen.

docker – teilt sudo mit, dass wir den docker-Befehl mit Rechten ausführen möchten.

exec – ist die Kurzform für „Docker Execute“ – es sagt Docker, dass wir ein ausführbares Programm aufrufen möchten, das im Container gefunden werden kann.

-it – sind Parameter-Flags und stehen jeweils für Interaktiven Modus (i) und Teletype-Format (t).

{IhrContainerName} – ist erforderlich, falls wir mehrere Container in dieser Docker-Instanz bereitgestellt haben. So teilen wir dem Docker-Handler mit, mit welchem Container wir arbeiten möchten.

/bin/bash – ist der vollständige Pfad zum ausführbaren Programm innerhalb des Containers, das wir starten möchten. Für diejenigen, die mit Unix-Betriebssystemen nicht vertraut sind: „bash“ ist die Kurzform für die „Bourne Again Shell“, eine Erweiterung einer der ursprünglichen Kommandozeilen-Umgebungen aus den frühesten Tagen von Unix (der Bourne Shell).

Wenn Sie den obigen Befehl ausführen, werden Sie feststellen, dass sich die Eingabeaufforderung Ihrer Shell-Umgebung ändert. Sie sollte sich in etwa zu folgendem Format wandeln:

root@{12-stellige-hexadezimale-Nummer}:/#

Der ungewöhnlich aussehende 12-stellige Hex-Wert ist natürlich die eindeutige Container-ID, die ContainerStation während des Erstellungsprozesses vergeben hat. Jetzt sind wir im MariaDB-Container. Wir müssen herausfinden, wo wir uns im Container befinden und was sich an diesem Ort befindet. Wir führen einen Listenbefehl aus und verwenden Parameter, um alle Dateien und das Langformat anzufordern (was dem „Details“-Ansichtsmodus des Windows Explorers entspricht). Üblicherweise landen wir im Container immer im obersten, „root“-Verzeichnis seines lokalen Dateisystems („/“). Führen Sie den Shell-Befehl aus:

ls -al

Sie sollten ungefähr 24 Einträge im Root-Ordner des Containers sehen, wobei die ersten 3 „.“, „..“ und „.dockerenv“ sind. Nun müssen wir dieses Dateisystem nach einem Ort durchsuchen, den wir als Verbindungspunkt zwischen dem Container und dem NAS-Dateisystem verwenden können.

Suchen Sie nach einem Ordner namens „var“. Dieser Name ist in Unix-typischer 3-Buchstaben-Kurzform geschrieben und steht für „variable“ und zeigt an, dass der Inhalt dieses Ordners im Laufe der Zeit volatil sein kann. Das ist perfekt für unsere Zwecke, da er als Speicherbereich für Daten genutzt wird. Wechseln Sie in den Ordner mit:

cd var

(um das Verzeichnis zu wechseln zu var) und listen Sie erneut auf:

ls -al

Nun sollte der erste gelistete Ordner „backups“ sein. Betreten Sie ihn mit

cd backups

und listen Sie erneut auf

ls -al

Sie werden feststellen, dass er leer ist, was genau das ist, was wir sehen möchten. Das ist perfekt – genau das, was wir suchen. Wir werden diesen Ordner als Verbindungspunkt für die Backups verwenden, die wir von unseren MariaDB-Datenbanken machen werden. Wir müssen keine Änderungen vornehmen und sollten die Container-Shell mit dem Befehl

exit

verlassen. Wenn Sie dies tun, sollte sich die Eingabeaufforderung wieder auf die QNAP-Standardanzeige zurücksetzen. Nun können wir zurück zur Browser-Sitzung wechseln, zu Container Station zurückkehren und, falls nötig, auf die Menüoption „Container“ im linken Seitenbereich klicken. Dort können wir unseren „MariaDB“-Container finden – den, den wir gerade erstellt haben. Durch Klicken auf das Zahnrad im „Aktionen“-Spalte öffnet sich ein Pop-up-Fenster, in dem wir entweder „Stoppen“ oder, falls nötig, „Erzwungenes Stoppen“ auswählen können. Sobald der Container gestoppt wurde, können wir im Pop-up-Fenster nach unten scrollen und „Entfernen“ auswählen, um den Container zu löschen. Nachdem er entfernt wurde, können wir den Prozess erneut starten, jetzt da wir festgelegt haben, wo wir die Verbindung zwischen dem Dateisystem des Containers und dem QTS-Dateisystem herstellen möchten.

08. Zugriff auf den MariaDB-Kommandozeileninterpreter über Docker

Wenn Sie diesen Abschnitt erreicht haben, gehen wir davon aus, dass Sie einen korrekt konfigurierten Container haben, einschließlich aller erforderlichen Verbindungen zwischen dem Container und dem QTS-Dateisystem. Da wir nun unseren Container „sehen“ können, greifen wir jetzt auf MariaDB darin zu. Das machen wir mit einem weiteren Docker-Befehl, aber wie zuvor zerlegen wir ihn, damit Sie verstehen, was Sie tun und warum. Denken Sie daran: Falls Sie es noch nicht getan haben, müssen Sie zuerst mit „exit“ den Container verlassen, um wieder zur NAS QTS-Betriebssystem-Eingabeaufforderung zurückzukehren, bevor Sie diesen nächsten Schritt ausführen. Die Syntax des Befehls, den wir verwenden werden, lautet:

sudo docker exec -it {yourContainerName} mariadb -p{rootPassword}

Dieser Befehl gliedert sich wie folgt auf:

docker exec – Wir möchten, dass Docker eine ausführbare Datei innerhalb eines Containers startet.

-it – Wir möchten dies (i)nteraktiv und über eine (t)eletypartige Schnittstelle tun.

mariadb – Wir möchten, dass Docker genau diese ausführbare Datei im Container ausführt.

-p{rootPassword} – Wir möchten dieses Passwort an die ausführbare Datei übergeben – und das ist dasselbe Passwort, das wir zuvor in der Environment-Variable angegeben haben.

Sie werden feststellen, dass wir keine UserID im Befehl angeben mussten – es wird standardmäßig „root“, der Haupt-Administrationsbenutzer, verwendet.

Mit diesem Befehl sollten Sie Zugriff auf das MariaDB CLI (Command Line Interpreter) erhalten. Ich werde nicht im Detail darauf eingehen, wie Sie diese frische MariaDB-Instanz für die Nutzung konfigurieren, zum einen, weil Sie Ihre eigenen lokalen Konfigurationsanleitungen befolgen werden, zum anderen, weil die Details ganz davon abhängen, wofür Sie MariaDB nutzen möchten oder müssen. Die Grundlagen sollten jedoch ziemlich einfach sein:

  • Befolgen Sie das Prinzip der geringstmöglichen Berechtigung – vermeiden Sie die Verwendung von Platzhaltern beim Erteilen von Berechtigungen.

  • Insbesondere beim Zulassen von „Netzwerkzugriff“ sollten Sie nicht einfach „%“ [allein] als „Host“ angeben (was den Zugriff von jedem Host erlauben würde), sondern verwenden Sie den Platzhalter in Verbindung mit Ihrer Netzwerkadresse, um den Zugriff nur auf Ihre lokale Adresse (oder einen Teil davon) zu beschränken. Zum Beispiel lautet meine lokale IP-Netzwerkadresse 172.16.0.0 mit einer Maske von 255.255.0.0, also würde ich 172.16.%.% als Host-Wert angeben. Damit kann ich von meinem lokalen Netzwerk auf MariaDB zugreifen, aber von nirgendwo sonst.

  • Das Wichtigste ist, ein Nicht-root-MariaDB-Konto zu erstellen, das die Berechtigung hat, von Ihrem (PHPMyAdmin / MySQL Workbench) Host auf die Datenbank zuzugreifen, und diesem Benutzerkonto die notwendigen Rechte zu geben, um neue Datenbanken zu erstellen.

Zusätzlich zu allem, was Sie sonst noch für Ihre neue MariaDB-Instanz einrichten, empfehle ich dringend, ein spezielles, schreibgeschütztes Konto einzurichten, das Sie für Backups jeder Datenbank verwenden können. Wenn Sie das tun möchten, liefern die folgenden Befehle das Notwendige. Erstellen wir zunächst einen Benutzer, der mit der Loopback-IP-Adresse verknüpft ist:

CREATE USER ‘backup’@’127.0.0.1’ IDENTIFIED BY ‘{securepassword}’;

Wenn Sie den obigen Befehl für Ihren Benutzer eingeben, beachten Sie, dass das von Ihnen angegebene Passwort in einfache Anführungszeichen, aber nicht in geschweifte Klammern gesetzt werden sollte (es sei denn, Sie möchten diese in Ihrem Passwort haben!). Wenn Ihr Passwort zum Beispiel „password“ wäre, würden Sie

IDENTIFIED BY ‘password’;

verwenden.

Als Nächstes gewähren wir diesem Benutzer die Berechtigung, auf jede Datenbank „SELECT“ auszuführen:

GRANT SELECT ON *.* TO ‘backup’@’127.0.0.1’;

Das hilft Ihnen, die Syntax von „grant“ für Berechtigungen zu verstehen. Hier ist „SELECT“ die Berechtigung, die dem Benutzer erteilt wird, und „ON *.*“ weist MariaDB an, diese Berechtigung für alle lokalen Datenbanken zu vergeben. Es ist eine spezielle Version des Grants – sie gilt nicht nur für alle Datenbanken, die zum Zeitpunkt der Ausführung des Befehls existieren, sondern auch automatisch für alle neuen Datenbanken, die danach erstellt werden.

„SELECT“ ist jedoch nicht die einzige Berechtigung, die ein Benutzer benötigt, um Backups auszuführen. Im Folgenden liste ich die Berechtigungen auf, die ich verwendet habe. Und um klarzustellen: Diese Liste habe ich nicht frei erfunden, sondern aus der offiziellen MariaDB-Dokumentation. Hier ist die vollständige Liste:

SELECT, RELOAD, PROCESS, SHOW DATABASES,

LOCK TABLES, SHOW VIEW, EVENT, TRIGGER

Wir haben dem Backup-Benutzer bereits das Privileg „SELECT“ erteilt, also müssen Sie jetzt nur noch für jedes der oben genannten MariaDB-Kommandoprivilegien die Anweisung wiederholen. Es sind insgesamt 8, also wenn Sie pro „GRANT“-Anweisung ein Privileg vergeben, wiederholen Sie den Befehl 8 Mal.

Indem Sie das „backup“-Konto mit @’127.0.0.1’ anlegen, beschränken Sie die Nutzung des Kontos auf den Server, auf dem Sie ein natives Timer-Utility, crontab, verwenden, um Backup-Skripte auszuführen. Das ist einfach gute, grundlegende Sicherheit. Das bedeutet, dass selbst wenn jemand zufällig das Passwort des Kontos herausfindet, er es nicht (remote) nutzen kann, um all Ihre Daten zu stehlen.

Bevor wir diesen Abschnitt verlassen, hier noch ein paar sehr nützliche Kommandozeilenbefehle, die Sie sich merken sollten:

SELECT user,host FROM mysql.user;

und

SHOW GRANTS FOR ‘{user}’@’{context}’;

zum Beispiel:

SHOW GRANTS FOR ‘backup’@’127.0.0.1’;

Wie die Syntax des Befehls vermuten lässt, erhalten Sie damit eine Übersicht über die dem betreffenden Benutzer zugewiesenen Berechtigungen – Sie können damit überprüfen, ob Ihr Benutzer die notwendigen Rechte für lokale Backup-Aktivitäten hat.

Bitte beachten: Es ist so einfach, an diesem Punkt zu „schummeln“ und einen Befehl wie

GRANT ALL PRIVILEGES TO *.* FOR ‘{yourUser}’@’%’;

[was Ihnen die vollständige Berechtigung gibt, alles von überall zu tun] auszuführen, aber es lohnt sich, sich bewusst zu machen, wie gefährlich das ist. Die allgemeinen Regeln sollten sein: Nur die Berechtigungen vergeben, die benötigt werden. Entfernen Sie sie sofort, sobald sie nicht mehr erforderlich sind.

Nachdem das gesagt ist, ist es auch eine gute Idee, einen interaktiven Benutzer einzurichten, der weitreichende Berechtigungen für alle Inhalte hat und der den Server remote erreichen kann. Nicht für den allgemeinen oder dauerhaften Gebrauch, sondern um ihn im Notfall unter „Glas“ zu halten und nur im Ernstfall zu verwenden. Wenn Sie sich entscheiden, einen solchen Benutzer zu erstellen, können Sie ihn verwenden, um den nächsten Teil dieses Prozesses zu validieren.

09. Zugriff auf MariaDB über PHPMyAdmin

Trotz seiner etwas veralteten Oberfläche ist PHPMyAdmin ein bemerkenswert leistungsfähiges Tool und mehr als in der Lage, die Remote-Verwaltung von MariaDB-Datenbanken über eine Weboberfläche zu ermöglichen. Dank seiner Ausgereiftheit gibt es mehrere Möglichkeiten, die Details eines neuen MariaDB-Servers hinzuzufügen – zum Beispiel ist es möglich, die Details in die Standarddatei „config.inc.php“ einzutragen oder eine zweite Konfigurationsdatei anzulegen, die einem einzelnen MariaDB-Server gewidmet ist.

In meinem Fall habe ich mich für die schnelle und unkomplizierte Lösung entschieden und die Details für einen zweiten Remote-Server zu einer bestehenden Konfiguration hinzugefügt, wie folgt (aus meiner config.inc.php-Datei entnommen): -

$i = 0;
/

  • Erster Server - MariaDB 5.5.68 auf TVS-672XT
    /
    $i++;
    /
    Authentifizierungstyp /
    $cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
    /
    Serverparameter /
    $cfg[‘Servers’][$i][‘verbose’] = ‘TVS-672XT - MariaDB 10.5.8’;
    $cfg[‘Servers’][$i][‘host’] = ‘172.16.101.2’;
    $cfg[‘Servers’][$i][‘port’] = ‘3307’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    $cfg[‘Servers’][$i][‘AllowNoPassword’] = false;
    *

/

  • Zweiter Server – MariaDB 12.0.2 via ContainerStation auf TVS-672XT
    /
    $i++;
    /
    Authentifizierungstyp /
    $cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
    /
    Serverparameter /
    $cfg[‘Servers’][$i][‘verbose’] = ‘TVS-672XT - MariaDB 12.0.2’;
    $cfg[‘Servers’][$i][‘host’] = ‘172.16.101.201’;
    $cfg[‘Servers’][$i][‘port’] = ‘3306’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    $cfg[‘Servers’][$i][‘AllowNoPassword’] = false;
    *

Wie Sie an der Auswahl der Parameter und Werte sehen können, muss ich mich bei jeder Sitzung mit einem angegebenen Benutzername und Passwort bei PHPMyAdmin authentifizieren; anschließend bleibt meine Sitzung über ein Browser-Cookie aktiv.

Die besonders aufmerksamen Leser unter Ihnen werden bemerken, dass mein „erster Server“ Port 3307 und nicht 3306 verwendet. Das liegt daran, dass zum Zeitpunkt der Installation von MariaDB 10.5.8 bereits eine Kopie von MariaDB 5.x auf demselben NAS lief – und QTS dies automatisch erkannt und einen Portkonflikt vermieden hat, indem für den zweiten MariaDB-Daemon von 3306 auf 3307 erhöht wurde.

Wenn Sie bereits eine laufende PHPMyAdmin-Instanz haben, dann führen Sie nach dem Speichern Ihrer geänderten Standardkonfigurationsdatei (oder dem Hinzufügen einer zweiten Datei) einfach Ihr lokales Äquivalent von:

sudo systemctl reload apache2

auf Ihrem Webhost aus, um die neue Konfiguration zu aktivieren und sicherzustellen, dass Ihre PHPMyAdmin-Webanwendung ihre Laufzeitkonfiguration aktualisiert hat.

Öffnen Sie Ihren Browser (oder einen neuen Tab darin) und geben Sie die URL Ihrer PHPMyAdmin-Instanz ein. Wenn Ihr ContainerStation-Image der einzige Remote-Server ist, können Sie einfach mit dem soeben erstellten Benutzername und Passwort darauf zugreifen.

Wenn Sie Ihre ContainerStation-Instanz als zweiten Remote-Server hinzugefügt haben, sollten Sie im Anmeldefenster ein Kombinationsfeld sehen, in dem Sie auswählen können, welchen Remote-Server Sie verwalten möchten. Die Beschreibungen, die im Kombinationsfeld erscheinen, stammen aus dem Wert, den Sie mit der „[‘verbose’]“-Umgebungsvariable im „config.inc.php“-Skript angegeben haben, wie oben gezeigt.

Standardmäßig führt Sie PHPMyAdmin auf eine „Server-Startseite“ für Ihren aktuell ausgewählten Server. In einem Randbereich auf der linken Seite Ihres Bildschirms sollten Sie bereits vorhandene, erstellte Datenbanken sehen. Da dies eine brandneue Instanz von MariaDB ist, sollten nur „information_schema“, „mysql“, „performance_schema“ und „sys“ angezeigt werden.

Das wichtigste Element, das Sie hier jedoch überprüfen sollten, befindet sich auf der rechten Seite der Seite im Element mit dem Titel „Datenbankserver“. Dort sollten Sie das Attribut „Server-Version“ finden.

Der spezifische Wert, den ich aus meinem bereitgestellten Docker-Image sehe, ist

12.0.2-MariaDB-ubu2404 - mariadb.org binary distribution

Für mich ist das entscheidende Element „12.0.2“ – denn das bestätigt, dass das Image die Version von MariaDB ausführt, die ich möchte. Beachten Sie jedoch, dass das Element „mariadb.org“ auch den Ursprung des Docker-Images angibt. Vielleicht nicht ausreichend, um zu garantieren, dass es sich um ein authentisches MariaDB-Image handelt, aber auf jedem Schritt des Weges haben wir sorgfältig auf die Echtheit geachtet.

10. Einrichten einer Testdatenbank

Während wir bei PHPMyAdmin (oder MySQL Workbench oder welchem Tool auch immer du verwendest) angemeldet sind, werden wir eine Datenbank erstellen und sie mit einer Tabelle füllen, die ein paar Datensätze enthält.

Da ich im Voraus nicht weiß, welches Toolset du verwendest, gebe ich hier keine detaillierten Anweisungen. Stattdessen sage ich nur, dass ich meine Datenbank „demo“ genannt habe, meine Tabelle „demotable“ und darin zwei Felder erstellt habe: „demokey“, das ein automatisch inkrementierender Primärschlüssel war, und „demotext“, ein einfaches Textfeld. Mach es so, wie es für dich passt.

Als Nächstes müssen wir diese Tabelle mit echten Daten füllen. Es ist wichtig, dass wir mindestens zwei Datensätze erstellen. Da wir einfache Textfelder erstellt haben, solltest du einfach Text wie

Dies ist der erste Testdatensatz
Dies ist der zweite Testdatensatz

eingeben können.

Wir werden diese Tabelle verwenden, um unseren Backup-Prozess zu testen. Es ist keine schlechte Idee, die „Browse“-Funktion von PHPMyAdmin zu nutzen, um die Datensätze anzusehen und sicherzustellen, dass der Text in jedem Datensatz deutlich sichtbar ist.

Sobald du bestätigt hast, dass die Datensätze erstellt wurden (bei PHPMyAdmin kannst du einfach den „Browse“-Tab verwenden, der der linkeste Tab sein sollte, sobald du die Tabelle über das Menü in der linken Seitenleiste ausgewählt hast). Wenn alles passt, können wir mit dem Backup dieser Datenbank fortfahren…

11. Sichern oblig einer containerisierten MariaDB-Datenbank

Kehren Sie zu Ihrer SSH-Sitzung zurück, die mit Ihrem NAS verbunden ist. Dort können wir eine Variante des folgenden Befehls ausführen, angepasst auf high Datenbank-, Ausgabeverzeichnis- und Benutzernamen, die wir eingerichtet haben:-

sudo docker exec -it {IhrContainerName} mariadb-dump -h 127.0.0.1 -P3306
-u {IhrBackupBenutzername} -p{IhrBackupBenutzerPasswort}
–databases {IhrDatenbankName}
–result-file /var/backups/{IhrDatenbankName}.sql

Hier ist eine Aufschlüsselung der in Congress Befehl verwendeten Variablen:-

-it – gibt an, dass der Befehl interaktiv und über die Teletype- (also textbasierte) Schnittstelle ausgeführt werden soll

{IhrContainerName} – ist der Name, den Sie bei der Erstellung des Containers angegeben haben

-h 127.0.0.1 – weist ins mariadb-dump-Kommando an, auf dem Loopback-Host zu laufen. Noch wichtiger: Das entspricht der Art, wie wir unseren „backup“-Benutzer eingerichtet haben. Erinnern Sie sich, wie wir ihn als „backup@127.0.0.1“ erstellt haben? Genau narum… Im Grunde werden wir diesen Befehl in ein Skript einbinden, das wir automatisch pipeline können – und wir schreiben sowohl diesen Befehl als auch die Rechte des :
Benutzers, der ihn ausführt, so, dass er nur direkt vom Host-NAS ausgeführt werden kann. Selbst wenn jemand die ID „backup“ und das dazugehörige Passwort kennt, könnte er diese Zugangsdaten in dieser Umgebung nicht nutzen, um auf die Datenbanken zuzugreifen. Minimalprinzip

-P3306 – gibt den von der MariaDB-Instanz genutzten TCP-Port an

-u {IhrBackupBenutzername}
– ist der Name eines MariaDB-Benutzers, der mit Rechten zum Zugriff auf die Zieldatenbank für Backup-Zwecke eingerichtet wurde. In meinem powered Beispiel reicht der Benutzername „backup“.

-p{IhrAdminPasswort}
Das ist der Wert, den Sie im through „IDENTIFIED BY ‘…’;“-Parameter bei der Erstellung des Benutzerkontos gesetzt haben. WICHTIG: Für den Fall, dass Sie es nicht bemerkt haben: Sie können zwischen „-u“ und dem Start Ihres UserID einen Leerschritt lassen, das wird ignoriert, aber wenn Sie zwischen „-p“ und Ihrem Passwort einen Leerschritt lassen, wird das Leerzeichen als Teil des Passworts behandelt und die Authentifizierung schlägt fehl!

–databases {IhrDatenbankName}
[Beachten Sie, dass vor „databases“ zwei Bindestriche stehen!] Wir geben für unsere Testübung nur einen Datenbanknamen an („demo“), und ehrlich gesagt empfehle ich, den Befehl immer so zu verwenden. Es ist einfach, ihn mehrfach aufzurufen – und die Vereinfachung reduziert Fehler.

–result-file /var/backups/{IhrDatenbankName}.sql
[Beachten Sie, dass vor „result-file“ zwei Bindestriche stehen!] In diesem Parameter entsprechen die Elemente „/var/backups/“ der Verzeichnisstruktur, die wir im MariaDB-Container (v12.0.2) erkundet und überprüft haben, und der Name, den wir vergeben, sollte eine sinnvolle Repräsentation der zu archivierenden Datenbank sein.

Das Hinzufügen der .sql-Endung ist nicht zwingend, aber eine nützliche Konvention, um den Dateityp am Namen zu erkennen.

Sie werden wahrscheinlich aufgefordert, Ihr Kontopasswort einzugeben, um einen sudo-Befehl auf dem NAS auszuführen – das ist Standardpraxis für die Nutzung von Admin-Funktionen auf Unix-Systemen. Sobald Sie es eingegeben haben, und wenn Sie alle Schritte korrekt befolgt haben, sollten Sie ohne Fehlermeldung wieder die Shell-Eingabeaufforderung sehen. Die üblichen Regeln gelten – falls Sie doch einen Fehler bekommen, gehen Sie die vorherigen Schritte besonders sorgfältig durch.

Wir müssen jetzt prüfen, ob das Backup wie erwartet gelaufen ist. Wenn Sie die Dateisystem-Bridge wie in dieser Anleitung beschrieben erstellt haben, müssen Sie nicht erneut in den MariaDB-Container wechseln mit:-

sudo docker exec -it {IhrMariaDBContainerName} /bin/bash

Denn die gerade erstellte Datei sollte im angegebenen Zielverzeichnis sichtbar sein. Falls Sie die Bridge nicht erstellt haben, wechseln Sie wie oben beschrieben wieder in den Container und wechseln Sie in das vorgesehene Ausgabeverzeichnis mit:-

cd /var/backups

und listen dann den Inhalt des Verzeichnisses auf:-

ls -al

Wenn alles wie geplant lief, sollten Sie eine Datei mit sehr aktuellem Zeitstempel und dem Namen {IhrDatenbankName}.sql sehen.

Wenn ja, Glückwunsch! Falls nicht, gehen Sie die vorherigen Schritte sorgfältig durch und versuchen Sie es erneut.

Abschließend, während Sie sich im Ordner mit Ihrem Backup befinden [entweder im Container oder per Secure Shell auf Ihr NAS], führen Sie folgenden Befehl aus:-

cat {IhrDatenbankName}.sql

Damit wird der Inhalt der Datei auf Ihrem Bildschirm ausgegeben und Sie sollten den Inhalt Ihrer „demo“-Datenbank sehen, inklusive der erstellten Tabelle und der beiden Textzeilen. Es ist wichtig, dass Sie bestätigen, dass diese 2 Datensätze in dieser Datei vorhanden sind. Denn schon bald werden wir einen davon löschen und dann dieses Backup nutzen, um unsere Daten wiederherzustellen…

11a. Export einer Sicherungsdatei durch die Container-Wand

Wenn Sie die Ordner-Brücken-Methode über den Storage-Parameter verwendet haben, um Ihrem Container Zugriff auf das NAS-Dateisystem zu gewähren, können Sie direkt zum nächsten Schritt übergehen. Falls Sie die Verbindung jedoch nicht erstellt haben, müssen Sie Ihre .sql-Sicherungsdatei außerhalb Ihres Containers kopieren, um sie im Rahmen eines Wiederherstellungs-Prozesses verwenden zu können.

Die gute Nachricht ist, dass dies sehr einfach ist und nur einen einzigen Befehl erfordert.

Geben Sie an der Secure Shell-Eingabeaufforderung Ihres NAS Ihre angepasste Version des folgenden Befehls ein:

sudo docker cp {IhrMariaDBContainerName}:var/backups/{IhrDatenbankName}.sql /share/NFSv=4/Public/Backup/

Zwischen „.sql“ und „/share/NFS“—oder dem entsprechenden lokalen Pfad Ihres QNAP NAS—sollte ein Leerzeichen stehen. Ersetzen Sie außerdem „/Public/Backup“ durch den relevanten Freigabe- und Ordnernamen, um festzulegen, wo die Datei abgelegt werden soll.

Was dieser Befehl manuell macht, ist eine Kopie Ihrer Export-/Dump-Datei zu erstellen und diese Kopie auf einem Teil Ihres NAS-Dateisystems abzulegen, der für Sie und damit auch für HBS3-Backup sichtbar ist.

Bitte beachten Sie: Das bedeutet auch, dass Sie jetzt drei Kopien Ihrer Datenbank haben—das Original und zwei Dump-Dateien. Für kleine Datenbanken ist das kein Problem, kann aber bei sehr großen Datenstrukturen lästig werden.

Was wir bis zu diesem Punkt erreicht haben, ist die Fertigstellung von zwei der drei Phasen des Sicherungsprozesses, die wir für ein angemessenes Backup-Ergebnis benötigen. Die letzte Phase wäre natürlich, den Zielordner („/Public/Backup“) in einen formalen Datenverwaltungsprozess einzubinden, wie etwa das native QTS Utility HBS3.

Außerdem – wenn Ihre Datenbankdateien groß sind und Sie den „Dateikopier“-Prozess verwenden, um Ihre .sql-Exporte außerhalb Ihres MariaDB-Containers abzulegen, sollten Sie ein paar zusätzliche Schritte in Betracht ziehen. Nachdem Ihr endgültiger/letzter Sicherungsauftrag gelaufen ist, sollten Sie einen weiteren Auftrag konfigurieren, um die Zwischenkopie der .sql-Datei, die Sie in /var/backups innerhalb des MariaDB-Containers abgelegt haben, zu entfernen. Wenn Sie HBS3 als Sicherungsmechanismus verwenden, verfügt dieses Utility nicht über die Fähigkeit, zusätzliche Befehle auszuführen oder externe Batch-Jobs auszulösen.

Mein Ansatz war einfach, HBS3 auf einen Timer zu setzen und dann ein reguläres Shell-Skript per crontab zu einem Zeitpunkt auszuführen, der deutlich nach Abschluss des HBS3-Jobs liegt. Beachten Sie, dass dies nicht völlig sicher ist – denn das „Aufräum“-Skript wird auch dann ausgeführt, wenn der HBS3-Job fehlschlägt…

12. Überprüfung einer MariaDB-Wiederherstellung

Wir haben gerade erfolgreich ein vollständiges Backup unserer „demo“-MariaDB-Datenbank erstellt. Wenn die Ausgabe an einen Speicherort innerhalb des MariaDB-Containers geschrieben wurde, haben wir anschließend einen zweiten Befehl verwendet, um das Backup aus dem MariaDB-Container zu extrahieren und an einen Ort zu verschieben, an dem wir es mit einer robusteren Backup-Strategie schützen können.

Aber funktioniert dieses Backup wirklich?!

Finden wir es heraus.

Öffnen Sie zunächst Ihren Browser, kehren Sie zu Ihrer PHPMyAdmin-Sitzung zurück [Sie müssen sich ggf. erneut authentifizieren, falls die Sitzung abgelaufen ist] und greifen Sie im Browse-Modus auf die Demo-Tabelle zu. Sie werden sehen, dass unsere beiden Dummy-Datensätze vorhanden sind.

Es spielt keine Rolle, welchen Datensatz Sie an dieser Stelle auswählen, aber löschen Sie einen davon. Dies ist in PHPMyAdmin ganz einfach – klicken Sie einfach auf den Text „Löschen“ in der Zeile des Datensatzes, den Sie entfernen möchten. Sie erhalten ein Bestätigungs-Pop-up-Fenster und anschließend eine Bestätigung, dass der Datensatz gelöscht wurde, gefolgt von einer Aktualisierung der Seite, auf der nur noch ein Datensatz angezeigt wird.

Gehen Sie als Nächstes zurück zur „Datenbank“-Seite unserer Demo-Datenbank, indem Sie auf den Datenbanknamen („demo“) klicken, wie er im linken Randbereich von PHPMyAdmin erscheint. Das Hauptfenster sollte sich ändern und unsere „demotable“ anzeigen, und das Statusfeld „Zeilen“ sollte bestätigen, dass nur noch ein Datensatz vorhanden ist.

Oberhalb des Hauptbereichs des Fensters befindet sich eine Reihe von Befehlstabs, beginnend mit „Struktur“ und „SQL“. Wählen Sie den Tab mit dem Namen „Importieren“. Der erste Abschnitt des „Importieren“-Fensters ist „Datei zum Importieren:“. Klicken Sie auf das Wort „Durchsuchen“ neben dem Textfeld, das den Anfangswert „Keine Datei ausgewählt“ enthält, und navigieren Sie durch Ihr Dateisystem zu dem Ort, an dem Sie Ihre .sql-Datei gerade geschrieben oder kopiert haben. Vergewissern Sie sich, dass Sie die richtige Datei ausgewählt haben.

Sie müssen keine der Standardparameter für den Import ändern, scrollen Sie also einfach zum unteren Ende dieser Seite und klicken Sie auf die Schaltfläche „Importieren“. Halten Sie die Luft an, drücken Sie die Daumen usw. Sie machen das schon.

Wenn der Import abgeschlossen ist, gehen Sie zurück zum oberen Menü und wählen Sie erneut den Tab „Browse“. Ungefähr in der Mitte des Bildschirms sollten Sie beide Datensätze in Ihrer Tabelle sehen, wobei der gerade gelöschte Datensatz durch Ihren Importvorgang sicher wiederhergestellt wurde.

Herzlichen Glückwunsch!

Sie haben nun erfolgreich – manuell – einen Prozess durchgeführt, um ein Backup von einem Container-MariaDB-Server auf Ihr lokales Dateisystem zu erstellen. Wenn Sie jemals eine Wiederherstellung aus einem Ihrer regelmäßigen Backups durchführen müssen, „im Ernstfall“ – weil Sie wirklich Daten wiederherstellen müssen – ist dies der Prozess, den Sie verwenden sollten.

Wir sind fast am Ziel!!!

13. Automatisierung des Backup-Prozesses

=== WICHTIGES UPDATE – 20. Mai 2026 ===

Ich kehre zu diesem Leitfaden und insbesondere zu diesem Schritt zurück, um eine wichtige Änderung am unten enthaltenen Beispielskript vorzunehmen. In der Originalversion [die untenstehende Fassung ist jetzt überarbeitet] hatte ich einen Befehl aufgenommen, der mit „docker -it exec“ begann. Wie du unten sehen kannst, habe ich nun

  1. die Parameter „-it“ entfernt
  2. klargestellt, dass du dem „docker“-Befehl den vollständigen Pfad deiner Docker-Binärdatei voranstellen solltest. Diesen erhältst du, indem du eine SSH-Sitzung zu deinem NAS öffnest und an der Eingabeaufforderung „which docker“ eingibst.

Der Grund, warum ich die Parameter „-it“ entfernt habe, ist, dass diese angeben, dass der Befehl interaktiv und im Terminal-Modus ausgeführt werden soll, was für eine Batch-Verarbeitung nicht gültig ist. Diese Parameter waren ein Überbleibsel, das ich versehentlich aus manuellen Tests übernommen hatte. Vor QTS 5.2.9.3451 (veröffentlicht etwa Ende April 2026) hatte deren Verwendung keine Auswirkungen. Nach dem Update führten sie allerdings dazu, dass der Befehl mit der Fehlermeldung „the input device is not a TTY“ abgebrochen wurde.

Falls du die hier beschriebene Lösung bereits implementiert hast, musst du dein Backup-Skript bearbeiten und überall bei Docker-Befehlen, die mariadb-dump aufrufen, das „-it“ entfernen.

=== ENDE UPDATE ===

So hilfreich diese manuellen Schritte auch sind – sie werden schnell lästig, wenn man jedes Mal per Hand ein Backup machen muss. Daher automatisieren wir das Ganze mit Hilfe des Cron-Tools, das unser QNAP NAS und das QTS-Betriebssystem bereitstellen. (Für alle Nicht-Unix-Profis: „cron“ steht ebenfalls für einen Begriff – diesmal für „chronologisch“ –, da es sich um eine zeitgesteuerte Steuerung handelt.)

Zunächst schreiben wir ein Shell-Skript, das die Backup-Schritte für uns übernimmt. Wir legen dieses Skript in einem Ordner ab, der uns als Administratoren des NAS zugänglich ist – aber vor normalen Benutzern geschützt bleibt. Das kann entweder über einen dedizierten „Admin Share“ erfolgen oder über einen öffentlichen Share, wobei dann die Ordnerberechtigungen angepasst werden, um den Zugriff auf den Skriptordner einzuschränken. Und natürlich sollte auch dieser Speicherort in ein HBS3-Backup eingeschlossen werden …

Die Datei muss Anweisungen enthalten, die dem folgenden Beispiel entsprechen – du kannst es nach Bedarf anpassen:

#!/bin/bash
#

{Pfad zu deiner Docker-Binärdatei}/docker exec {DeinContainerName} mariadb-dump -h 127.0.0.1 -P3306
-u {deinBackupAccountName} -p{deinBackupAccountPasswort}
–databases {deinDatenbankname}
–result-file /var/backups/{deinDatenbankname}.sql

Falls du den Ordner von deinem MariaDB-Container zum NAS-Dateisystem als „Bridge“ erstellt hast, benötigst du die folgende Zeile NICHT:

docker cp {DeinContainerName}:var/backups/{deinDatenbankname}.sql /share/NFSv=4/Public/Backup/

Stattdessen solltest du den Parameter „–result-file“ auf das gewünschte Zielverzeichnis im „Public“-Share deines NAS abändern.

Der zweite Befehl, „docker cp“, bedeutet „Docker Copy“ und tut genau das, was der Name sagt: Er kopiert das Backup, das im Container erzeugt wurde, automatisiert an einen Ort außerhalb des Containers, von wo aus es in reguläre Backups einbezogen werden kann.

Achte besonders darauf, dass die Bindestrich-Präfixe bei „–databases“ und „–result-file“ jeweils zwei Bindestriche haben, nicht nur einen … Bitte beachte auch, dass du in den Skriptversionen dieser Befehle kein „sudo“ davor benötigst – Cron führt das Skript ohnehin mit Root-Berechtigungen aus.

Für dieses Beispiel gehen wir davon aus, dass das Skript wie folgt gespeichert ist:

/share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh

Gehe zu dem Ordner, in dem dein Skript liegt, und führe diesen Befehl aus:

ls -al

Überprüfe die Berechtigungen des Skripts. Sie sollten in etwa so aussehen: -rwxrwxr-x

Die genauen Berechtigungen sind nicht so entscheidend, Hauptsache, das Zeichen „x“ erscheint in jedem der drei Triplets, da es anzeigt, dass die Datei für Besitzer, Gruppe und andere als eXecutable markiert ist.

Teste, ob das Skript wie erwartet läuft, indem du aus deiner NAS-SSH-Sitzung Folgendes eingibst:

sudo /share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh

Ersetze dabei natürlich den Ordner und den Skriptnamen durch deine tatsächlichen Werte.

Weil wir das Skript mit Root-Rechten ausführen [durch das Präfix „sudo“], wirst du nach deinem Passwort gefragt. Nach der Eingabe sollte das Skript erfolgreich ausgeführt werden. Überprüfe mit dem Dateimanager auf deinem Arbeitsplatzrechner im Ordner „/Backup/“, ob die Datei das aktuelle Datum aufweist und damit erfolgreich erstellt wurde.

Jetzt bleibt nur noch, die zeitgesteuerte Automatisierung für das Backup einzurichten.

Als Erstes schauen wir in die QNAP-Referenzdokumentation, hier – lies dir die Anleitung zum Bearbeiten der Crontab sorgfältig durch. Wie du siehst, darfst du NICHT den „klassischen“ Weg über „crontab -e“ gehen, sondern musst die entsprechende Datei per Hand editieren.

Öffne als Nächstes einen neuen Browsertab und gehe zu https://crontab.guru/, einer sehr praktischen Hilfeseite, mit der du dir einen Crontab-Zeitstring zusammenstellen kannst, um das Backup an den gewünschten Tagen und Uhrzeiten zu starten.

Sobald du das gewünschte Zeitmuster für deinen Cronjob nach Anleitung und mit der Hilfe der oben genannten QNAP-Referenz erstellt hast, füge den Zeitstring in die entsprechende Datei auf deinem NAS ein.

Wie sieht das in der Praxis aus? Ich lasse meine Backups jede Nacht um 01:45 laufen, und mein Crontab-Eintrag dazu sieht so aus:

45 1 * * * /share/NFSv=4/Public/Software/QNAP/scripts/DockerMariaDBbackup.sh 2>/dev/null

Es ist vielleicht nicht sofort offenkundig, aber der Teil „2>/dev/null“ weist Cron an, evtl. Fehler, die das Skript ausgibt, einfach zu ignorieren. Warum mache ich das? Weil mein Skript simpel und gründlich getestet ist – und weil ich das Ergebnis mindestens wöchentlich prüfe. Noch ein Hinweis zu diesem Crontab-Eintrag: Jedes Mal, wenn QTS aktualisiert wird, ändert sich meist die Reihenfolge der Einträge in der Crontab. Ich behaupte nicht, dass das völlig zufällig ist, aber falls es dabei ein System gibt, habe ich es noch nicht erkannt. Sollte deine Zeile im Nachhinein nicht mehr die letzte sein, ist das kein Grund zur Sorge – einfach die Liste durchsuchen und du wirst deinen Eintrag finden.

14. Einen Applaus verdienen

Ich meine es ernst. Nicht nur dafür, dass Sie MariaDB erfolgreich in ContainerStation eingerichtet, Backups konfiguriert und getestet und dann einen automatisierten Backup-Plan erstellt haben. Ich meine, herzlichen Glückwunsch dafür, dass Sie die Ausdauer hatten, bis ganz zum Ende dieser Anleitung zu lesen!

Ich bin beeindruckt!

Nur zwei kleine Bitten von mir, bevor Sie gehen. Erstens: Wenn Ihnen etwas auffällt, das verbessert, geklärt, vereinfacht oder korrigiert werden kann, bitte hinterlassen Sie einen entsprechenden Kommentar – oder schreiben Sie mir direkt.

Zweitens: Falls Ihnen diese Anleitung geholfen hat, bitte überlegen Sie, ob Sie etwas „zurückgeben“ möchten. Wenn Sie etwas herausfinden – sei es mit Ihrem QNAP NAS, MariaDB oder etwas anderem – suchen Sie das passende Forum und schreiben Sie darüber. Sie helfen damit nicht nur sich selbst, sondern uns allen.

Danke.