Published by Erik Uden 🍑

published

Erik Uden 🍑's Post

In Reply To: this post

Troet.Cafe und Muenchen.Social — 008.1

Kleine Zwischenbilanz: Wir stecken bei Schritt 6 fest! Wir haben ein paar Probleme beim Importieren der Datenbank und bekommen ständig neue Fehlermeldungen. Wir haben eine interne Gruppe gegründet mit einigen Menschen die sich mit Postgresql auskennen und ihre Hilfe angeboten haben. Wir werden vielleicht gleich eine ganz andere Herangehensweise versuchen.

Es wird in diesem Abschnitt sehr technisch, deshalb entschuldigt wenn dies wenig fĂĽr die normalen User ist fĂĽr welche diese Plattform natĂĽrlich auch / eher gedacht ist!

Wir haben diese Nacht einen Datenbank-Export von troet.cafe angefertigt, einfach ein psql dump von dem psql-server auf der Version 10.23! Diesen zu importieren in eine leere Datenbank (psql Version 15) wirft viele Fehler auf. Die originale Datenbank von troet.cafe ist 99GB, die resultierende Datenbank nach dem Import nur noch 44GB. Also läuft irgendwas sehr schief. Die einzigen Fehlermeldungen bezogen sich auf ein „foreign key constraint”.

Wir hatten es auch mit einer Datenbank der gleichen Version versucht, doch das hat umso mehr Fehler aufgeworfen.

Wir haben daraufhin versucht das Schema der Datenbank nur zu importieren aus dem bereits existierenden dump, wobei jedoch auch 5 Fehler auftreten.

Als wir jedoch das Datenbank-Schema einzeln exportieren und einzeln importierten funktionierte dies ohne Fehler!

Nun importierten wir nur die Daten und bekamen dabei wieder hunderte Fehler mit „foreign key constraint”. Die resultierende Datenbank war lediglich 33GB. Foreign key constraints verstehe Ich so, dass sie die Integrität einer Datenbank wahren. Wenn also ein Eintrag in einer Datenbank irgendwo erwähnt wird, dieser jedoch nicht existiert, dann läuft irgendwas schief. Sowas kann zum Beispiel passieren wenn man auf Mastodon einen Beitrag favorisiert, dieser Beitrag jedoch gelöscht wird. In der Liste von favorisierten Beiträgen eines Users steht dann zwar noch der Beitrag eingetragen, doch in Echt ist er gelöscht. Durch normal auftretende Fehler können solche Ungereimtheiten in der Datenbank sich verhäufen. Doch in unserem Fall scheint irgendwas beim Import groß schief zu laufen, da Ich nicht erwarte das ⅔ der Datenbank nur Fehler sind!

Es könnte möglich sein das selbst schon beim Exportieren (dump) der Datenbank Fehler auftreten, um sicherzustellen, dass dem nicht der Fall ist, machen wir folgendes:

Unsere jetzige beste Idee ist nochmal einen psql-Server der Version 10.23 aufzusetzen und daraufhin den originalen Ordner von der troet.cafe Datenbank (var/lib/psql/10/.) in eine Zip zu tun (dafür müsste troet.cafe heruntergefahren werden). Diese Zip wird übertragen auf den neuen Server und dort eingespielt, so haben wir einen postgresql Server mit allen Fehlern der originalen Datenbank und können re-index sowie repair Befehle ausführen um die Datenbank zu reparieren und Ungereimtheiten wie diese zu entfernen. Dies live an der troet.cafe Instanz zu machen wäre zu gefährlich.

Wenn diese FehlerbehebungsmaĂźnahmen erfolgreich sind versuchen wir weitere Dinge wie:

  • Die Datenbank exportieren und importieren und gucken oh Fehler auftreten.
  • Das Upgraden auf höhere Versionen von psql.

Wenn dies erfolgreich ist und die daraus resultierenden Datenbanken keine Fehler mehr haben, dann ist jedes zukĂĽnftige Update leicht!

Wer mithelfen will / Erfahrung mit Datenbanken hat schreibt mich gerne auf Matrix an und kann Teil der Gruppe werden welche gerade daran arbeitet das Problem zu lösen!

Euer Team TroetCafe ❤️


Likes: 0
Boosts: 0
Hashtags: #troetcafelebt #muenchensociallebt #troetcafe #muenchensocial #teamtroetcafe #teammuenchensocial
Mentions:

Comments

Displaying 0 of 1 comments

Erik Uden 🍑

In response to this post

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!


Troet.Cafe und Muenchen.Social — 008.3

Wir werden jetzt das troet.cafe herunterfahren! Postet bitte heute keine Lebensnotwendigen Informationen, denn es kann sein das wir wieder zurückgehen müssen falls doch etwas schief läuft!

Wenn troet.cafe wieder online geht tobt herum und meldet alle Fehler (falls welche auftreten) denn dann haben wir noch die Möglichkeit alles rückgängig zu machen. Wir führen jetzt einen smoke test durch! :blobcatmeltlove:

Halt stand, troet.cafe!

by Erik Uden 🍑 ;

Tags: #troetcafelebt #muenchensociallebt #troetcafe #muenchensocial #teamtroetcafe #teammuenchensocial


Likes: 0

Replies: 1

Boosts: 0