Chapter 8 · 8.2
Databases en Docker-volumes goed meenemen
This article hasn't been translated yet. You're reading the Dutch version.
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.
