Hoofdstuk 8 · 8.2
Databases en Docker-volumes goed meenemen
Een database die draait, schrijft steeds in zijn bestanden. Kopieer je die bestanden halverwege, dan kan je back-up kapot zijn. Daarom maak je eerst een dump: een nette kopie van de database in één bestand.
Waar staan je gegevens?
| Wat | Waar |
|---|---|
Je compose-bestanden, Caddyfile, .env en mappen zoals vw-data | /srv/diensten |
Docker-volumes, zoals uptime-kuma en n8n-data | /var/lib/docker/volumes/diensten_<naam>/_data |
| Databasedumps | /var/backups/db |
| Instellingen van de server | /etc |
Docker zet de naam van je map voor de naam van het volume: in /srv/diensten wordt uptime-kuma dus diensten_uptime-kuma. Bekijk de echte namen met sudo docker volume ls.
Het voorbereidingsscript
Zet dit in /usr/local/sbin/voor-backup.sh (chmod 700). Het wordt gestart door het back-upscript uit Back-ups met restic naar een andere plek.
#!/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
Gebruik je geen WordPress, laat dat deel dan weg. Heb je een database buiten Docker, dan gaat het net zo met mariadb-dump --single-transaction of pg_dump.
Apps met een SQLite-database
Vaultwarden, Uptime Kuma en n8n bewaren hun gegevens standaard in een SQLite-bestand in hun volume of map. Het eenvoudigste en veiligste is: zet ze tijdens de back-up even stil. Dat doet het back-upscript uit Back-ups met restic naar een andere plek met docker compose stop en daarna docker compose start. Dat duurt meestal maar even; 's nachts merkt niemand het. Wil je geen onderbreking, volg dan de back-upaanwijzingen van de app zelf, zoals die in de wiki van Vaultwarden.
De map van de database zelf (hier diensten_wp-db) sla je over: daarvoor heb je de dump.
Terugzetten van een app
- Zet de app stil:
sudo docker compose stop vaultwarden. - Haal de map terug:
sudo restic restore latest --target /tmp/terug --include /srv/diensten/vw-data(met de variabelen uit Back-ups met restic naar een andere plek). - Vervang de map door de teruggezette versie en start de app weer.
- Een database zet je terug door de dump in te lezen, bijvoorbeeld
docker compose exec -T wp-db sh -c 'mariadb -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' < wordpress.sql.
