Troubleshooting in einem PostgreSQL Dockercontainter
Aus Gründen dich ich nicht mehr nachvollziehen kann ist mir eine PostgreSQL Datenbank einer Docker Mailman Installation in die Wicken gegangen. Leider kam ich noch nicht dazu diese in meine Backups aufzunehmen. Es waren aber schon genug Anwender auf dem Server angemeldet das ich ein “meldet auch alle noch mal an” vermeiden wollte. Ich wollte also zu mindestens die Mailinglisten mit Abonnenten bekommen.
Ich hatte bisher noch keinerlei Erfahrungen mit der Datenbank. Hier die Dokumentation meiner Anfängerschritte. Use at your own Risk.
Auf dem Docker Server habe ich ein Backup des korrupten Datenbankverzeichnis erstellen und auf einen Testserver kopiert und ausgepackt.
tar xf database.tar
Gemäß dieser Beschreibung haben ich dann einen Postgress Docker Image erstellt. Zu Beginn lies sich Docker Server nicht starten da das Standard Mailman Dockerfile eine ältere Version verwendet. Das konnte ich aber erst sehen nachdem ich auf den Parameter -d verzichtet habe.
docker network create --driver bridge postgres-network
sudo docker run --name postgres4 --network postgres-network -v /path/toyour/tmp/database:/var/lib/postgresql/data -e POSTGRES_PASSWORD=geheim postgres:9.6-alpine
Dann konnte ich mit mich von einem zweiten Terminal in das Docker Image bewegen. Der Befehl
sudo docker ps
liefert mir die Container ID und mit
sudo docker exec -it "containerid" bash
kam ich auf die Kommandozeile in den Container. Dort habe ich mit
psql mailmandb mailman
versucht herauszufinden wo meine “wichtigen “ Daten sind. Mit dem Befehl \dt habe ich die Tabellennamen bekommen und dann konnte man wie bei mysql die sql befehle absetzen.
Für mich waren am Ende vor allem zwei Tabellen wichtig. Die Benutzer und die Zuordnungen zu den Mailinlisten . Dann konnte man von der Container Kommandozeile sich die Daten schön in eine Textdatei schreiben die man auch auf dem Host dann lassen konnte.
psql mailmandb mailman -c 'select list_id,address_id,preferences_id from member;' > /var/lib/postgresql/data/list-infos.txt
psql mailmandb mailman -c 'select email, display_name, user_id from address;' > /var/lib/postgresql/data/user-infos.txt