Troet.Cafe und Muenchen.Social — 008.2
Entschuldigt das fehlende Update von Gestern! Es ist sehr spät geworden und Ich wollte nach 22:00 Uhr eigentlich nur noch schlafen :blobcatgooglyholdingitsheadinitshands:
Wir haben es tatsächlich geschafft! Wir haben noch keinen echten Transfer der Datenbank gemacht, jedoch haben wir mit einer Kopie der Datenbank eine erfolgreiche Migration ohne Datenverlust durchgeführt.
Alles was wir heute machen müssen ist es diese Schritte zu wiederholen währenddessen das troet.cafe heruntergefahren bleibt und zum Schluss alles auf den neuen Datenbank-Server umzustellen!
Der gestrige Tag war voll mit falschen Fehlermeldungen, Trugschlüssen, und ein Tappen im Dunkeln! Wir haben um die 50 unterschiedliche Methoden probiert und hätten noch viel mehr tun können. Letztendlich alle Fehlermeldungen an der Datenbank zu verstehen, diese in jedem Fall auf ihre Besonderheit runterzubrechen, und dann zu verstehen wo der Fehler wirklich ist, hat uns zum „Erfolg” gebracht! Auch wenn Martin bereits sehr glücklich war gibt es noch keinen Grund zu feiern, erst wenn wir das ganze in Echt durchgeführt haben!
Ein Beispiel eines solchen Trugschlusses war die unterschiedliche Größe der Datenbank nach dem Importieren. Auf troet.cafe ist die Datenbank 99GB, auf unserem Server war sie nur 33GB, dabei hatte dies einen anderen Grund. Wir dachten viele Daten waren verloren und versuchten einen Fehler zu finden wo gar keiner war! Im Nachhinein realisierten wir dann, dass wir die Lösung schon lange hatten.
Die Datenbanksoftware belügte uns auch zwischenzeitlich über die Anzahl der gespeicherten Beiträge! Das war echt witzig.
Eine vollständige Erklärung der zwei Fehler wird es demnächst geben — fürs erste ist hier der exakte Schritt für Schritt Weg, den Ich aus meinem ~40.000 Zeichen Protokoll des gestrigen Tages, herausgearbeitet habe, als das was wir tatsächlich mache müssen:
1. Troet.Cafe herunterfahren
2. Datenbank-Dump erstellen und Server offline lassen.
3. Datenbank-Schema-Clear-Text-Dump erstellen und Server offline lassen.
4. Beides auf neuen Server übertragen auf dem eine psql Datenbank der Version 15.7 eingerichtet ist.
5. Das clear-text Datenbank-Schema so editieren, dass „CREATE UNIQUE INDEX [...]” für index_preview_cards_on_url auskommentiert ist.
6. Das clear-text Datenbank-Schema importieren mit folgenden Befehl:
pg_restore -p 5432 -Fc -v -c --if-exists -U mastodon -n public --no-owner --role=mastodon -d mastodon_production /backup/mastodon_production-schema.sql
7. Den Mastodon Postgresql-User zum Superuser benennen mit folgenden Befehl:
ALTER USER mastodon WITH SUPERUSER; (als postgres User innerhalb von psql auszuführen)
8. Die Datenbank-Dump-Daten importieren als Superuser mit der Flag --disable-triggers
pg_restore -p 5432 -j 16 -Fc -a -v -U mastodon -n public --no-owner --role=mastodon --disable-triggers -d mastodon_production /backup/mastodon_production_2024-05-11.sql
9. Den Index (außer den von index_preview_cards_on_url) neu aufbauen mit folgenden Befehl:
REINDEX database mastodon_production;
10. Den Mastodon Postgresql-User die Superuser-Rechte entfernen.
ALTER USER mastodon WITH NOSUPERUSER
11. Die Service- und Worker-Server auf den neuen Datenbankserver umstellen.
12. Folgenden tootctl Befehl von einen der Service- oder Worker-Server zur Lösung von Index-Korruption ausführen:
RAILS_ENV=production bin/tootctl maintenance fix-duplicates
(In der Zukunft nach jedem Datenbank-Update den REINDEX Befehl aus Punkt 9 verwenden um dieses Problem zu vermeiden.)
13. Troet.Cafe wieder hochfahren und alles läuft wie vorher nur besser und auf einer neuen Version!
Dies ist ein klarer Schritt für Schritt Weg wie wir die Datenbank heute retten — wenn diese Hürde überwunden ist dann wird jedes Update und jede Migration in der Zukunft extrem einfach!
#TroetCafeLebt #MuenchenSocialLebt #TroetCafe #MuenchenSocial #TeamTroetCafe #TeamMuenchenSocial