Kapitel 8 · 8.2
Datenbanken und Docker-Volumes richtig sichern
Eine laufende Datenbank schreibt ständig in ihre Dateien. Kopieren Sie diese Dateien mitten im Schreibvorgang, kann Ihr Backup beschädigt sein. Deshalb erstellen Sie zuerst einen Dump: eine saubere Kopie der Datenbank in einer einzigen Datei.
Wo liegen Ihre Daten?
| Was | Wo |
|---|---|
Ihre Compose-Dateien, Caddyfile, .env und Ordner wie vw-data | /srv/diensten |
Docker-Volumes, wie uptime-kuma und n8n-data | /var/lib/docker/volumes/diensten_<naam>/_data |
| Datenbank-Dumps | /var/backups/db |
| Einstellungen des Servers | /etc |
Docker stellt den Namen Ihres Ordners vor den Namen des Volumes: In /srv/diensten wird uptime-kuma also zu diensten_uptime-kuma. Die tatsächlichen Namen sehen Sie mit sudo docker volume ls.
Das Vorbereitungsskript
Speichern Sie dies in /usr/local/sbin/voor-backup.sh (chmod 700). Es wird vom Backup-Skript aus Backups mit restic an einen anderen Ort gestartet.
#!/bin/sh
set -e
mkdir -p /var/backups/db
chmod 700 /var/backups/db
cd /srv/diensten
# WordPress-database (MariaDB) als dump
docker compose exec -T wp-db sh -c \
'mariadb-dump --single-transaction -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' \
> /var/backups/db/wordpress.sql
Verwenden Sie kein WordPress, lassen Sie diesen Teil einfach weg. Haben Sie eine Datenbank außerhalb von Docker, funktioniert es genauso mit mariadb-dump --single-transaction oder pg_dump.
Apps mit einer SQLite-Datenbank
Vaultwarden, Uptime Kuma und n8n speichern ihre Daten standardmäßig in einer SQLite-Datei in ihrem Volume oder Ordner. Am einfachsten und sichersten ist es, sie während des Backups kurz anzuhalten. Das erledigt das Backup-Skript aus Backups mit restic an einen anderen Ort mit docker compose stop und danach docker compose start. Das dauert meist nur einen Moment; nachts merkt es niemand. Möchten Sie keine Unterbrechung, folgen Sie den Backup-Anleitungen der App selbst, etwa denen im Wiki von Vaultwarden.
Den Ordner der Datenbank selbst (hier diensten_wp-db) lassen Sie aus: Dafür haben Sie den Dump.
Eine App wiederherstellen
- Halten Sie die App an:
sudo docker compose stop vaultwarden. - Holen Sie den Ordner zurück:
sudo restic restore latest --target /tmp/terug --include /srv/diensten/vw-data(mit den Variablen aus Backups mit restic an einen anderen Ort). - Ersetzen Sie den Ordner durch die wiederhergestellte Version und starten Sie die App wieder.
- Eine Datenbank stellen Sie wieder her, indem Sie den Dump einlesen, zum Beispiel
docker compose exec -T wp-db sh -c 'mariadb -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' < wordpress.sql.
