
Datenbank-Upgrades gehören zu den Aufgaben, die man selten gern anfasst – vor allem, wenn produktive Systeme davon abhängen. Doch spätestens wenn eine Anwendung wie z.B. Authentik ein bestimmtes Datenbank-Mindestlevel verlangt (z. B. PostgreSQL ≥ 13), führt kein Weg an einer Migration vorbei.
In diesem Artikel zeige ich praxisnah, wie du eine bestehende MariaDB- oder PostgreSQL-Datenbank in einem Docker-Setup sicher auf eine neue Version migrierst.
Ob du eine produktive Authentik-Instanz migrierst oder deine Datenbank einfach sauber aktualisieren willst: Diese Anleitung führt dich Schritt für Schritt durch den Prozess.
-
- Alle Container ausser der Datenbank stoppen damit nichts mehr an den Daten in der Datenbank verändert wird
- Ein Backup der Datenbank ausführen
- Container ID herausfinden
docker ps | grep "db"
- Dump ausführen
- PostgreSQL
docker exec <container-id> pg_dumpall -U pg-user > pg-old.sql
- MariaDB
docker exec <container-id> mysqldump -u mariadb-user -p mariadb-db > mariadb-old.sql
- PostgreSQL
- Wenn die Datenbank direkt auf ein im Dateisystem bestehenden Ordner schreibt muss der „neu“ angelegt werden und damit bei einem fehler wieder auf den „alten“ stand zurückgegriffen werden kann.
mv database database.bak mkdir database
- Container ID herausfinden
- Docker Container DB stoppen und in die Compose Datei bearbeiten
- Neues Image hinzufügen
- alle anderen Container Kommentieren mit einem # damit die aktuell noch nicht gestartet werden
- Stack starten
docker compose up -d
- Neue Container ID herausfinden
docker ps | grep "db"
- Container Log prüfen ob keine Fehler oder Warnungen aufgetaucht sind und der Container läuft
docker logs <container-id>
- Dump wieder importieren
- PostgreSQL
cat pg-old.sql | docker exec -i <container-id> psql -U postgres
- MariaDB
cat mariadb-old.sql | docker exec -i <container-id> mysql -u mariadb-user -p
- PostgreSQL
- Bei mir gab es nach dem Importieren Beschäftigungsprobleme, daher gleich nach dem importieren die Berechtigungen neu setzen
- PostgreSQL
docker exec -it <container-id> psql -U pg-user GRANT ALL PRIVILEGES ON DATABASE pg-user TO pg-db;
- MariaDB
docker exec -it <container-id> mysql -u mariadb-user -p mariadb-db GRANT ALL PRIVILEGES ON mariadb-db.* TO 'mariadb-user'@'%';
- PostgreSQL
- Alle Container wieder normal starten
- Alles wieder stoppen
docker compose down
- Alle Kommentierten # Container in der Compose Datei wieder auskommentieren
- Alles starten
docker compose up -d
- Alles wieder stoppen
Evtl. muss je nach Umgebung der komplette Stack nochmals neugestartet werden da noch Tabellen oder Schema Updates durchgeführt wurden mit der neuen Datenbank Version.