Hyper Backup Container und MariaDB sicherung

  • 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

Habe mir noch eine Überlegung gemacht aber hab keinen Plan wie es umsetzen.

Wäre es möglich pro Tag (für die Container) an dem das Script ausgeführt wird ein Verzeichnis mit dem Datum erstellen zu lassen? Also angenommen ich mache Täglich ein Backup dass dann zb. 10.08.2023 / 11.08.2023 / 12.08.2023 alle abgelegt werden? Natürlich müsste das mit dem löschen dann noch immer funktionieren.
 
Du möchtest also für jeden Tag ein eigenes Backup-Unterverzeichnis mit Datum haben?

Ich weiß jetzt nicht, welche Vorlage du genommen hast. Hier mal eine Anpassung von #19 , die auch ein Backup einer Docker MySQL-DB enthält sowie jetzt zusätzlich auch den JSON-Export (erfordert root-Rechte – einfach mit # auskommentieren, wenn du es nicht brauchst).

Bash:
#!/bin/bash

# anzupassen:
BackupDir="/volume3/DEV/_test"
IgnoredContainer=( )    # nur aktive Container werden gesichert!
mysqlPW=""
BackupDays="7"          # Anzahl der Tage, nach denen die Backups gelöscht werden sollen

#–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
currentBackupDir="${BackupDir%/}/$(date +%Y-%m-%d)"
[ ! -d "${currentBackupDir}" ] && mkdir "${currentBackupDir}"

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 "export ${container} ..."

    # JSON (erfordert root-Rechte):
        # https://www.synology-forum.de/threads/automatisches-erstellen-der-export-config-json-files-via-skript.108440/post-1008804
        /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="${currentBackupDir}/${container}_$(date +%Y-%m-%d_%H-%M).json" name="${container}"  > /dev/null 2>&1

    # 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}" > "${currentBackupDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    fi
done

# MySQL / MariaDB in Docker sichern:
    docker exec nextcloud-db /usr/bin/mysqldump -u root --password="${mysqlPW}" nextcloud > "${currentBackupDir}/nextcloud_$(date +%Y-%m-%d_%H-%M).sql"

echo "Backups rotieren ..."
    find "${BackupDir}" -type f \( -name "*.json" -o -name "*.yml" -o -name "*.sql" \) -mtime +"${BackupDays}" -exec rm {} \;
 
    # alternativ mit Rotationsskript mit gleichem Rotationsschema wie oben (https://github.com/geimist/archive_rotate):
#   ./archive_rotate.sh -c -r -p="${BackupDir}" -s=* -d=*x"${BackupDays}"

    # zum Schluss noch die leeren Ordner löschen:
   find "${BackupDir}" -type d -empty -exec rm -r {} \;

exit 0
 
Zuletzt bearbeitet:
  • Like
Reaktionen: plang.pl
ACHTUNG:
In der neusten mariaDB Version ist der Befehl "mysqldump" nicht mehr implementiert -> die Backups / Dumps sind für den Po, wenn man diesen Befehl weiterhin nutzt. Ich hatte dadurch kürzlich einen Daten-Supergau!
In der neuesten MariaDB heißt der Befehl nicht mehr "mysqldump", sondern "mariadb-dump"!
 
Danke für den Input. Von welcher Version sprechen wir hier?
 
Ab mariadb 11.0.1
 
  • Like
Reaktionen: Grischabock
Vielen Dank, muss mal sehen was bei mir stehtY Vielleicht hat @geimist es in seinem script schon angepasst.
 
Nein, hatte ich nicht. Ich hatte nur die Unterordner angepasst. Letztendlich sollte die entsprechende Zeile so passen:
docker exec nextcloud-db /usr/bin/mariadb-dump -u root --password="${mysqlPW}" nextcloud > "${currentBackupDir}/nextcloud_$(date +%Y-%m-%d_%H-%M).sql"

Ich gehe jetzt einfach mal davon aus, dass die Syntax identisch ist. Einfach mal ausprobieren. Oder @plang.pl berichtet aus der Praxis :)
 
Genau so sollte es klappen, ja. So hab ich eben meine Dumps unter 11.0.2 erstellen können
 
docker exec nextcloud-db /usr/bin/mariadb-dump -u root --password="${mysqlPW}" nextcloud > "${currentBackupDir}/nextcloud_$(date +%Y-%m-%d_%H-%M).sql"
Ist hier pro DB eine Zeile einzufügen bzw. pro DB ein Script oder verstehe ich es falsch dass es sich hier zb. um eine nextcloud Datenbank handelt?

Bis zur Version 10 der MariaDB habe ich ja dein Script genutzt was nun ja nicht mehr geht nachdem ich meine mariDB in einen Container umgesiedelt habe und gleich die latest Version genommen habe.
 
Was hast du denn vor? Willst du alle sichern die in deiner MariaDB Container laufen?
Code:
docker exec MARIADB-CONTAINER /usr/bin/mariadb-dump -u root --password="${mysqlPW}" --all-databases > "${currentBackupDir}/db_dump_$(date +%Y-%m-%d_%H-%M).sql"
So müsste er alle Datenbanken in einer Datei sichern.
 
Ich möchte Automatisiert pro Datenbank ein Backup haben. Dazu kommt aber am liebsten noch dass es pro Tag einen Ordner generiert mit dem Datum und die alten dann löscht nach X Tagen. Grundsätzlich eigentlich wie das alte Script vor mariaDB 11
 
Ja dann kannst du doch das Script doch verwenden. Musst nur wie du geschrieben hast für jede DB eine Zeile einfügen.
 
Okay das würde gehen ist schon mal gut. Gerne hätte ich es halt wenn ich mal eine DB vergesse da einzutragen dass diese dennoch ein backup bekommt. also das die Aufgabe halt jede DB selbst aufnimmt oder halt sichert. So wie es in dem Script bis mariaDB 10 war
 

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