Hyper Backup Container und MariaDB sicherung

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Ich möchte mich nun dem (am liebsten automatisierten) Backup der docker Container und MariaDB`s widmen.

Für docker habe ich red5d/docker-autocompose auf den Weg bekommen. Nur finde ich gerade nichts schlaues zur Installation. Dazu kommt dann noch wie ich da eine Automatisierte Lösung mittels HyperBackup oder Aufgaben Manager hinbekomme.

Weiters gilt das selbe für die MariaDB dumps, wie bekomme ich die Automatisiert hin?

Beides möchte ich gerne auf meinen Backup Server spielen (sofern in einem Verzeichnis abgelegt mit HyperBackup).
Anleitungen dazu habe ich nichts wirklich gefunden oder ich war einfach blind. Es gibt viele Themen aber irgendwie keinen Abschluss oder keinen der mein Ziel verfolgt.
Wenn es geht würde ich gerne beides noch an einen USB Stick an der DS sichern wollen. Diesen kann ich dann austauschen oder im Notfall kurz schnappen und habe das wichtigste noch dabei.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
nichts schlaues zur Installation
Ich lasse dafür folgendes Script laufen. Immer wenn ich einen Container ändere / neu installiere. Hab ich seinerzeit auch hier im Forum gefunden, weiß aber nicht mehr, wo:
Bash:
#!/bin/bash

# anzupassen:
BackUpDir="/volume1/docker/Backup"
IgnoredContainer=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)

#–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "${container}" <<< "${IgnoredContainer[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"

    # YAML:
        # https://www.synology-forum.de/threads/docker-container-automatische-docker-compose-file-erstellen-als-backup.110444/post-897496
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose "${container}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    fi
done
exit
Oben das Backupdir natürlich anpassen, wenn du willst.
Hierzu habe ich folgende Aufgabe in den Aufgabenplaner geschrieben (als root):
docker exec mariadb /usr/bin/mysqldump -u USER --password=PASSWORT DBNAME > /volume1/docker/backup/DBNAME.sql
Da musst du natürlich USER, PASSWORT und DBNAME anpassen. Also pro DB einen Dump machen. Der User ist bei mir ein extra Backup User, den ich in der mariadb angelegt habe.


EDIT: Quelle des Scripts steht in dem Script selbst.
 
  • Like
Reaktionen: Monacum

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Ich lasse dafür folgendes Script laufen.
Da fehlt mir aktuell noch die Installation von docker-autocompose an der es gerade noch scheitert.
Das Script läuft auch über den Aufgabenplaner als root oder?

Hierzu habe ich folgende Aufgabe in den Aufgabenplaner geschrieben (als root):
Ich habe von @geimist in einem Thema noch dieses Script gefunden aber noch nicht getestet.
https://git.geimist.eu/geimist/MariaDB_dump/src/branch/main/MariaDB_DUMP.sh

Der User ist bei mir ein extra Backup User, den ich in der mariadb angelegt habe.
Ah ja das ist ein guter Ansatz, Danke

Sofern es klappt wäre eine komplette Lösung für alle DB`s sicherer wenn man es mal vergessen sollte.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Da fehlt mir aktuell noch die Installation von docker-autocompose
Das brauchst du nicht zu installieren. Das Script lädt den Container bei Bedarf, startet ihn, erstellt die Compose Files und schmeißt den Container danach wieder weg.
Aufgabenplaner als root
jap
noch dieses Script gefunden aber noch nicht getestet.
Das kannst du auch nehmen. Kann noch einiges mehr. Mein Script erstellt einen Dump und überschreibt dabei den alten Dump. Das verlinkte Script kann halt versionieren. Es geht aber nicht für MariaDB als Docker-Container, wenn ich den Code richtig interpretiere.
Eine Versionierung kannst du aber einfach in jedem Script nachbauen
komplette Lösung für alle DB`s sicherer
Da bin ich leider nicht fündig geworden. Ein Dump wird immer für eine DB erstellt und nicht für eine Instanz.


Nachtrag: Bei meiner Lösung oben musst du "mariadb" durch den Namen ersetzen, den der Container bei dir hat.
 
  • Like
Reaktionen: Grischabock

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Das brauchst du nicht zu installieren. Das Script lädt den Container bei Bedarf, startet ihn, erstellt die Compose Files und schmeißt den Container danach wieder weg.
Hat super geklappt auch mit dem wechsel des BackupDir, Vielen Dank

Das kannst du auch nehmen.
Klappt auch perfekt da ich das MariaDB Paket von Synology einsetze. Auch ein komplettes Backup geht dabei Perfekt.


In beiden Fällen wäre eine Automatische Löschung der ältesten Daten noch schön. Also ja das man halt gewisse Versionen behalten kann. Gut bei den Containern muss es ja nicht sein, ich mache da aber dennoch ein Wöchentliches Backup falls ich vergessen sollte nach dem Anlegen eines neuen Containers ein Backup zu machen. Nun muss ich halt daran denken vielleicht einmal im Monat aufzuräumen.

Die MariaDB sichere ich mehrmals, da wäre es wünschenswert wenn es eine Autolöschung geben würde. Vielleicht hat da aber @geimist noch eine Lösung dazu wie das Umsetzbar wäre mit seinem Script.

Erstmals DANKE an euch zwei für das bereitstellen. Nun kann ich ja beruhigt sein ;-)
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Du kannst einfach in einem Verzeichnis Daten älter als 5 Tage (hier bezogen auf Dateieindung) löschen lassen:
find "$backup_dir" -name "*.yml" -mtime +5 -exec rm {} \;
Das kannst du ans Autocompose-Script mit ranklatschen.
5 kannst du auch durch eine andere Anzahl an Tagen ersetzen. Das Gleiche kannst du auch für die MariaDB Backups machen. Musst du die variable "backup_dir" weglassen und durch den Pfad für die DB-Backups ersetzen.
 
  • Like
Reaktionen: Grischabock

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
oh klasse Vielen Dank
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Also müsste es so passen?

Code:
#!/bin/bash

# anzupassen:
BackUpDir="/volume1/backup/docker"
IgnoredContainer=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)

#–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "${container}" <<< "${IgnoredContainer[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"

    # YAML:
        # https://www.synology-forum.de/threads/docker-container-automatische-docker-compose-file-erstellen-als-backup.110444/post-897496
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose "${container}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    find "$backup_dir" -name "*.yml" -mtime +5 -exec rm {} \;
    fi
done
exit
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Ich würde es eher so machen:
Bash:
#!/bin/bash

# anzupassen:
BackUpDir="/volume1/backup/docker"
IgnoredContainer=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)

#–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "${container}" <<< "${IgnoredContainer[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"

    # YAML:
        # https://www.synology-forum.de/threads/docker-container-automatische-docker-compose-file-erstellen-als-backup.110444/post-897496
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose "${container}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    fi
done
find "$backup_dir" -name "*.yml" -mtime +5 -exec rm {} \;
exit
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Ah okay als extra Part darunter.

Vielen Dank
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
In deiner Version hätte er es jedem Durchlauf der Container ausgeführt. Bei 10 Containern hätte er es 9 mal umsonst gemacht. Nachdem ersten löschen wäre ja nichts mehr da :)
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.658
Punkte für Reaktionen
5.832
Punkte
524
Ich exportiere mittels Script als*.json, ist das besser, schlechter oder beinhalten json und yml die selben Infos?
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Das JSON ist soweit ich weiß nur Synology Kompatibel. Die YML kannst du überall verwenden. Da spielt das OS keine Rolle.
 
  • Like
Reaktionen: ctrlaltdelete

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.658
Punkte für Reaktionen
5.832
Punkte
524
Danke, dann lasse ich einfach beide Scripts laufen :cool:
 

MattCB

Benutzer
Mitglied seit
31. Jan 2012
Beiträge
382
Punkte für Reaktionen
71
Punkte
28
Ich nutze momentan wieder die Nextcloud per Docker. Da sollte es ja reichen, wenn ich die ausgelagerten Ordner sichere. Wenn ich den mariadb-Ordner sichere, sollte ja da auch die Datenbank gesichert sein. Ich habe in den jeweiligen Docker-Ordnern auch gleich die docker-compose.yml, so dass ich die Container nach einem Restore per Terminal oder Portainer neu anlegen kann (mit dem Container-Manager geht das ja auch mittlerweile über die Projekte) und somit quasi sofort an dem Backup-Zeitpunkt bin.

In meinem Fall wäre doch ein Dump der MariaDB Datenbank doppelt gemoppelt, oder? Denn durch das regelmäßige Backup (und zusätzlich Snapshots) sollte die Datenbank ja mit gesichert sein.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.379
Punkte
234
Die MariaDB sichere ich mehrmals, da wäre es wünschenswert wenn es eine Autolöschung geben würde. Vielleicht hat da aber @geimist noch eine Lösung dazu wie das Umsetzbar wäre mit seinem Script.
Habe ich doch mit im Skript beschrieben, aber jeweils auskommentiert. Einmal für die einzelnen DBs und für das Gesamtbackup. Für diesen Zweck hatte ich das Skript archive_rotate.sh geschrieben. Man muss es nur lokal speichern, dessen Pfad angeben und die gewünschten Parameter für die gewünschte Rotation anpassen.
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Oh das ist super, Danke.

Ja muss gestehen hab zwar gelesen wegen dem Einsatz von Rotate aber habe es nicht angeschaut ob ich das benötige 🙈

Klasse Arbeit Vielen Dank
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Wenn ich den mariadb-Ordner sichere, sollte ja da auch die Datenbank gesichert sein
Ja. Aber ob diese Sicherung konsistent ist, weißt du erst, wenn du sie getestet hast. Mehr Sicherheit hast du mit einem Dump.
 
  • Like
Reaktionen: MattCB

MattCB

Benutzer
Mitglied seit
31. Jan 2012
Beiträge
382
Punkte für Reaktionen
71
Punkte
28
Danke, habe die Zeile mit dem SQL-Dump jetzt einfach in das oben angeführte Script zum Erstellen der Docker-Compose-Files reingeschrieben. Somit werden die Einstellungen der Container und gleich die Datenbank der nextcloud gesichert. Von jedem Backupfile werden 7 Versionen aufbewahrt, das Script läuft jeden Tag einmal.

EDIT: Eigentlich macht das ja keinen Sinn, das komplette Script jeden Tag laufen zu lassen. Denn an den Container ändert sich ja in der Regel nicht wirklich was. Wichtiger ist da tatsächlich die Sicherung der Datenbank. Das werde ich dann doch in ein extra Script packen, dass dann regelmässig läuft.

Code:
#!/bin/bash

# anzupassen:
BackUpDir="/volume1/backup/docker"
# IgnoredContainer=()

#–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "${container}" <<< "${IgnoredContainer[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"

    # YAML:
        # https://www.synology-forum.de/threads/docker-container-automatische-docker-compose-file-erstellen-als-backup.110444/post-897496
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose "${container}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    fi
done
find "$BackUpDir" -name "*.yml" -mtime +7 -exec rm {} \;

docker exec nextcloud-db /usr/bin/mysqldump -u root --password=<MySQL-Rootpasswort> nextcloud > /volume1/backup/docker/sql/nextcloud_$(date +%Y-%m-%d_%H-%M).sql
find "/volume1/backup/docker/sql" -name "*.sql" -mtime +7 -exec rm {} \;
exit
 
Zuletzt bearbeitet:

Monacum

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
03. Jan 2022
Beiträge
2.200
Punkte für Reaktionen
1.024
Punkte
224
Du kannst es ja auch einfach nur einmal in der Woche oder alle zwei Tage laufen lassen, der Aufgabenplaner gibt dir da ja genügend Möglichkeiten
 


 

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