Komplette Lösung zum Upgrade von PostgreSQL auf einem Debian-Produktionsserver

Komplette Lösung zum Upgrade von PostgreSQL auf einem Debian-Produktionsserver

Ich verwende Debian 6 (Squeeze) in der Produktion für einige Websites. Ich habe mich für PostgreSQL-Backports entschieden, damit ich die Funktionen von PostgreSQL 9.0 nutzen kann. Ich dachte, es würde bei 9.0 bleiben und Updates für diese Hauptversion erhalten.

Unglücklicherweise wurden die Squueze-Backports auf PostgreSQL 9.1 aktualisiert, daher werde ich wahrscheinlich keine Updates auf 9.0 erhalten.

Ich plane ein Upgrade auf 9.1, weiß aber, dass dies nicht automatisch erfolgt.

Ich habe über das offizielle pg_upgrade und Debians pg_upgradecluster gelesen, wäre aber über eine vollständige Anleitung zum Upgrade dankbar.

  1. Welche Schritte sind zu tun (zuerst apt-get install postgresql, dann pg_upgradecluster, dann alten Cluster entfernen)? Eine Liste der Schritte wäre nett.
  2. Was sind mögliche Fehlerszenarien?
  3. Wie bereitet man sich auf Misserfolge vor und wie reagiert man darauf?

Ich kann die Datenbank nur für ein paar Stunden anhalten, also möchte ich vorbereitet sein

Antwort1

Es ist ziemlich schwierig, Ihnen einen schrittweisen Upgrade-Prozess zu bieten, der auf Ihre Situation/Umgebung zugeschnitten ist.
Ich habe versucht, einige der wichtigsten Punkte unten aufzuzählen, aber Sie müssen den Prozess wirklich an Ihre Umgebung anpassen.


Schritt Null: Entscheiden Sie, ob Sie ein Upgrade benötigen. Postgres 9.1 bietet synchrone Replikation und eine Reihe anderer toller Funktionen, die nützlich sind, wenn Sie sie benötigen, aber kein Grund sind, sofort ein Upgrade durchzuführen, wenn Sie sie nicht benötigen.

Schritt 1: Rechnen Sie damit, dass dies lange dauern wird, wenn Ihre Datenbank groß ist.
Selbst pg_upgradeder einfache Vorgang des Kopierens der Daten für ein Backup kann eine Weile dauern: Unsere 16 GB großen Datenbanken benötigen eine Stunde oder mehr für einen pg_dump/pg_restore oder etwa 10-20 Minuten für ein pg_upgrade).

Schritt 2, ich schlage vor, durchzulesen die9.1 Versionshinweise. Stellen Sie sicher, dass nichts, was Sie brauchen, kaputt ist und nichts, was Sie verwenden, sich geändert hat.
Nichts ruiniert Ihnen den Monat so sehr wie ein Datenbank-Upgrade, das Ihre Produktionssysteme zerstört.

Schritt 3,Der Upgrade-Abschnitt des Postgres-Handbuchsist Pflichtlektüre.

Schritt 4 (fügen Sie hier alle Debian-spezifischen Dinge ein, aber das ist wirklich nicht mein Ding :-)

Schritt 5: Erstellen Sie einen Upgrade-Plan.

Schritt 6, Testen des Upgrade-Plans (technisch optional, aberstarkempfohlen).

Schritt 7: Führen Sie das Upgrade auf Ihren Produktionssystemen durch.


Es gelten die üblichen Vorbehalte:

  • Durch das Upgrade kann Ihre Datenbank zerstört werden. Erstellen Sie eine Sicherungskopie.
    • Stellen Sie sicher, dass Sie es wiederherstellen können.
    • Stellen Sie sicher, dass Sie dieBinärdateienauch für das Datenbanksystem.
      (Behalten Sie wenn möglich Ihre alten Debian-Pakete – ich habe Leute erlebt, die ein fehlgeschlagenes Upgrade nicht rückgängig machen konnten, weil sie die alten Datenbank-Binärdateien nicht mehr hatten, und das ist wirklich ein sehr trauriger Anblick.)

  • Es wird länger dauern, als Sie erwarten. Planen Sie das ein. Die
    DB-Upgrade-Richtlinie meiner Firma lautet: „Beginnen Sie am Freitag um 18:00 Uhr. Wenn es bis Sonntag um 9:00 Uhr nicht funktioniert, führen Sie ein Rollback durch.“

  • Mounten Sie einen Scratch Monkey.
    Wenn Ihre Daten wirklich wichtig sind, stellen Sie eine Kopie davon an einem anderen Ort wieder her und testen Sie Ihren Upgrade-Pfad.
    Ja, ich mache das mit 16 GB-Datenbanken. Ich werde es immer noch mit 160 GB-Datenbanken machen, wenn ich einen Weg finde, es zum Laufen zu bringen :-)

Antwort2

Dies ist im Grunde Schritt 4 – plus die --checkOption, sicherzustellen, dass Ihre Pfade richtig sind. Meine Installation stammt aus den Repos und hat standardmäßige Debian-Pfade für die Dateien.

[email protected]:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check

Dies ist nicht gelungen, es wurde immer wieder angezeigt, dass ich beide Server auf demselben Port laufen ließ.

Folgendes schien zu funktionieren:

pg_dumpall -p 5432 | psql -d postgres -p 6543

Das ist nützlich.

verwandte Informationen