Docker MariaDB Backup

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

O.k, wie würde das konkret aussehen? Wie kann ich im Aufgabenplaner den Befehl als root ausführen?
 
Code:
docker exec mariadb /usr/bin/mysqldump -u BENUTZER --password=PASSWORD DB_NAME > /PFAD/$(date +%d%m%Y-%H:%M).dump.sql

cd /volume1/docker/mariadb/backup/

find -mtime +30 -delete

1. Zeile macht das Backup
2. Zeile wechselt in den lokalen Backup-Ordner in /docker
3. Zeile löscht die Files hier älter als 30 Tagen

Die Pfade musst du natürlich anpassen. Ich betreibe es schon ewig mit Postgresql. Alle Zeilen fügst du in der gleichen Aufgabe ein. Die werde in der gleichen Reihenfolge nacheinander abgearbeitet.
 
  • Like
Reaktionen: lux-o-pen
cd /volume1/docker/mariadb/backup/
find -mtime +30 -delete
Ein Verzeichniswechsel ist aus meiner Sicht nicht der beste Programmierstil.

Es geht auch unkompliziert, indem man den Pfad direkt an find übergibt.
find /volume1/docker/mariadb/backup -mtime +30 -delete
 
Nur so nebenbei, ich ja froh dass mir der Befehl auf dem Silbertablett serviert wurde und lerne noch: Liegt der Vorteil darin, dass es eine Zeile weniger gibt, oder gäbe es noch weitere Vorteile?
 
Nein du kannst das schon so machen wie von @EDvonSchleck vorgeschlagen. Die Funktionalität ist absolut gegeben. Ich wollte nur deshalb darauf hinweisen, dass es in besonderen Fällen keine gute Praxis ist ein Verzeichniswechsel anzustreben.

Wie viele Zeilen das Script hat, ist völlig irrelevant. Es ist auch nicht immer gut alles in eine einzige Zeile zu packen, sondern auch in einzelne Schritte aufzuteilen. Aber in diesem Fall wollte ich explizit den Verezeichniswechsel ansprechen.
 
  • Like
Reaktionen: lux-o-pen
Ein Verzeichniswechsel ist aus meiner Sicht nicht der beste Programmierstil.
Ja, da hast du recht, es geht auch in einer Zeile. Ich hatte es nur schnell über Nacht von mir kopiert. Dort habe ich aber noch andere Befehle, welche im gleichen Ordner ausgeführt werden. Somit benötige ich den Zugang zum Ordner direkt.

Außerdem war es schon früh und keiner war hier mehr wach.
 
es geht auch in einer Zeile
welche im gleichen Ordner ausgeführt werden. Somit benötige ich den Zugang zum Ordner direkt.
Mir ging es nie darum das alles in eine einzige Zeile zu bekommen.
Und auch, dass weitere Befehle in diesem Ordner ausgeführt werden sollen, kann man ganz ohne einen Verzeichniswechsel realisieren.

Ich möchte damit auch nicht sagen, dass es grundsätzlich falsch oder verboten ist. Aber aus meiner Sicht kann man einen Code komplett ohne Verzeichniswechsel schreiben ganz egal in welchem Verzeichnis etwas ausgeführt werden soll.
@EDvonSchleck Es ist überhaupt nicht böse gemeint und ich möchte dein Vorschlag nicht schlecht reden, sondern nur mein Feedback dazu geben.
 
Inzwischen wurden schon einige Backups angelegt, es funktioniert also.
Wie könnte ich die Replikation gefahrlos testen? Vielleicht auf einem externen System? (Ich habe noch eine weitere DS) Und wie würde ich am besten vorgehen?
 
Entweder Backup mit Hyper Backup, mit Snapshot Replication oder per rsync via Aufgabenplanung. Oder Active Backup for Business.
 
Die Frage ist eher, welche Backup gemeint sind? Datenbank-Dump oder die Ordnerstruktur mit Hyperbackup. Beides ist möglich. Ein Datenbank-Dump ist für einen Versionssprung notwendig. Das Sichern der Ordner ist eher die "unsaubere" Lösung innerhalb einer Version. Der Dump funktioniert hingegen in jeder Konstellation.
 
Hallo EDvonSchleck,

gemeint war die Wiederherstellung eines Backups, welches mit deinem Befehl aus Beitrag #23 erstellt wurde. Das Schreiben der Backups funktioniert damit automatisiert mit dem Aufgabenplaner tadellos, soweit ich es beurteilen kann. Also, wie könnte ich testen, ob es sich wiederherstellen lässt, ohne dass ich gleich die jetzige Datenbank überschreibe? Ich hatte da z.b. an meine zweite DS gedacht. Oder ginge das auch auf derselben DS?

Beste Grüße Klaus
 
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
Geht in jeder MariaDB Datenbank
 
Ich habe für meine Bookstack-Applikation einen MariaDB-Container angelegt. Über den Befehl

Code:
docker exec BookStack-DB /usr/bin/mysql -u root --password=rootpass bookstack > ../config/bookstack_db.sql

bekomme ich allerdings nur die folgende Meldung:

Code:
OCI runtime exec failed: exec failed: unable to start container process: exec: "/usr/bin/mysql": stat /usr/bin/mysql: no such file or directory: unknown

Hat jemand eine Idee was am Befehl genau geändert werden muss? Bin mit der MySQL-Thematik noch nicht so tief vertraut.
 
Der Befehl lautet auch so: docker exec CONTAINER /usr/bin/mysqldump
 
Mit deinem Befehl bekomme ich eine leere sql-Datei erzeugt.

Mit folgendem Befehl klappts wunderbar:

Code:
docker exec BookStack-DB /usr/bin/mariadb-dump --all-databases -uroot -p"rootpass" > "/volume1/Backup/Backup Bookstack/"$(date +"%Y%m%d")_bookstack.dump.sql
 
Zuletzt bearbeitet:
Achja stimmt. Beim letzten Major-Update wurde bei MariaDB der Dump Befehl geändert. Hierzu hatte ich auch mal ein Fiasko gehabt. In meinen Scripten hatte ich es bereits angepasst. Nun habe ich es auch in meiner Doku geändert.
 
Hallo,
ich bin schon am verzweifeln, denn ich bekomme das Backup der MariaDB einfach nicht hin.
Installiert habe ich es über Portainer mit folgendem Stack. Soweit funktioniert auch alles wunderbar.

Code:
---
version: "2"
services:
  bookstack:
    image: lscr.io/linuxserver/bookstack
    container_name: bookstack
    environment:
      - APP_URL=http://192.168.198.137:6875
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USER=bookstack
      - DB_PASS=123456
      - DB_DATABASE=bookstackapp
    volumes:

      - /volume1/docker/mariadb:/config
    ports:
      - 6875:80
    restart: unless-stopped
    depends_on:
      - bookstack_db
  bookstack_db:
    image: lscr.io/linuxserver/mariadb
    container_name: bookstack_db
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - TZ=Europe/Berlin
      - MYSQL_DATABASE=bookstackapp
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=123456
    volumes:
      - /volume1/docker/mariadb:/config
    restart: unless-stopped

Wenn ich obigen Befehl über SSH eingebe
Code:
docker exec bookstack_db /usr/bin/mariadb-dump --all-databases -u root -p 123456> "/volume1/docker/mariadb/backups bookstack/"$(date +"%Y%m%d")_bookstack.dump.sql
bekomme ich folgenden Fehler:
-sh: /volume1/docker/mariadb/backups bookstack/$(date +"%Y%m%d")_bookstack.dump.sql: No such file or directory

Vielleicht hat hier jemand eine Idee?

Vielen Dank
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat