Hyper Backup Container und MariaDB sicherung

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
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.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.567
Punkte für Reaktionen
1.392
Punkte
234
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

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
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"!
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Danke für den Input. Von welcher Version sprechen wir hier?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Ab mariadb 11.0.1
 
  • Like
Reaktionen: Grischabock

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Vielen Dank, muss mal sehen was bei mir stehtY Vielleicht hat @geimist es in seinem script schon angepasst.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.567
Punkte für Reaktionen
1.392
Punkte
234
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 :)
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Genau so sollte es klappen, ja. So hab ich eben meine Dumps unter 11.0.2 erstellen können
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
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.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
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.
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
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
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Ja dann kannst du doch das Script doch verwenden. Musst nur wie du geschrieben hast für jede DB eine Zeile einfügen.
 

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
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
 


 

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