Docker MariaDB Backup

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.117
Punkte
214
Nein, brauchst du nicht! Das kannst du direkt in den Befehl mitmachen!
 

lux-o-pen

Benutzer
Mitglied seit
26. Okt 2019
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
O.k, wie würde das konkret aussehen? Wie kann ich im Aufgabenplaner den Befehl als root ausführen?
 

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.117
Punkte
214
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

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.250
Punkte für Reaktionen
588
Punkte
174
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
 

lux-o-pen

Benutzer
Mitglied seit
26. Okt 2019
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.250
Punkte für Reaktionen
588
Punkte
174
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

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.117
Punkte
214
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.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.250
Punkte für Reaktionen
588
Punkte
174
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.
 

lux-o-pen

Benutzer
Mitglied seit
26. Okt 2019
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.369
Punkte
564
Entweder Backup mit Hyper Backup, mit Snapshot Replication oder per rsync via Aufgabenplanung. Oder Active Backup for Business.
 

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.117
Punkte
214
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.
 

lux-o-pen

Benutzer
Mitglied seit
26. Okt 2019
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.369
Punkte
564
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
Geht in jeder MariaDB Datenbank
 

florian1308

Benutzer
Mitglied seit
24. Jul 2023
Beiträge
12
Punkte für Reaktionen
2
Punkte
3
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.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.369
Punkte
564
Der Befehl lautet auch so: docker exec CONTAINER /usr/bin/mysqldump
 

florian1308

Benutzer
Mitglied seit
24. Jul 2023
Beiträge
12
Punkte für Reaktionen
2
Punkte
3
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:

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.369
Punkte
564
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.
 

nepu

Benutzer
Mitglied seit
10. Mai 2024
Beiträge
8
Punkte für Reaktionen
0
Punkte
1
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
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
10.900
Punkte für Reaktionen
4.125
Punkte
439


 

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 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!