it-swarm.com.de

Upgrade von Postgres 9.1 auf 9.3 auf dem Ubuntu-Server

Ich habe meinen Produktionsserver (Ubuntu 13.10) mit Postgresql 9.1 ausgeführt.

Ich möchte einige Funktionen von 9.3 verwenden und daher ein Upgrade durchführen.

Könnte mir jemand beim Upgrade von 9.1 auf 9.3 helfen, sodass es zu einer Ausfallzeit von nicht mehr als 30 Minuten kommt? oder so?

Hauptanliegen ist die Verhinderung eines Datenverlusts oder einer Dateieredundanz.

27
Ram Kumar

Grundsätzlich gibt es drei Möglichkeiten, PostgreSQL von verschiedenen Hauptversionen zu aktualisieren (z. B. 9.1 auf 9.3).

Upgrade mit pg_dump

Die erste und nach Möglichkeit empfohlene Methode besteht darin, einen Dump der alten (9.1) Version unter Verwendung der Binärdatei der neueren (9.3) Version und durchzuführen Stellen Sie es in einem neuen Cluster wieder her, der mit der neueren Version erstellt wurde.

Dieser Ansatz ist im Allgemeinen der langsamere, aber auch der praktikabelste. Ein Tipp, um es schneller zu machen, ist die Verwendung von Parallelität. Um mit parallelen Jobs zu sichern, haben Sie folgende Möglichkeiten:

$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

Sie müssen dies für jede Datenbank tun, indem Sie den Wert --jobs=4 Auf einen beliebigen Wert einstellen (testen Sie einige Werte von 2 bis zur Anzahl der Kerne und sehen Sie, welche eine bessere Geschwindigkeit ergeben). Während dieser Phase sollte niemand mit der Datenbank verbunden werden. Jede Änderung führt zu einem beschädigten Speicherauszug (aufgrund der nicht sicheren Option --no-synchronized-snapshots).

Danach können Sie Ihren Speicherauszug mit pg_restore In der neuen Instanz wiederherstellen:

$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

Danach wird empfohlen, ANALYZE in Ihrer Datenbank auszuführen:

$ vacuumdb --analyze-only mydatabase

(Wenn Sie sich die Zeit leisten können, führen Sie nur --analyze aus, um auch VACUUM die Datenbank zu erstellen und die Sichtbarkeitskarten zu aktualisieren.)

Upgrade mit pg_upgrade

Eine andere Option ist die Verwendung von der Beitrag pg_upgrade . Mit der --link - Methode können Sie PostgreSQL sehr schnell aktualisieren.

Vor der Verwendung müssen Sie eine Sicherungskopie des gesamten Datenverzeichnisses erstellen, da im --link - Modus bei einem Fehler möglicherweise beide Daten (neu und alt) verloren gehen. Lesen Sie auch die gesamten Dokumente und insbesondere die Notizen unten (es gibt einige Einschränkungen für pg_upgrade).

UPDATE: Bitte verwenden Sie die Option --check, Bevor Sie den endgültigen Befehl ausführen. Für große Datenbanken empfiehlt es sich außerdem, diesen Befehl in einer Bildschirmsitzung auszuführen.

Upgrade mit einem Trigger-basierten Replikationstool

Eine weitere Option zum Aktualisieren einer Version ist die Verwendung eines Replikationstools, das auf dem Trigger basiert. Wie Slony, Bucardo und Londiste.

Dies ist die Option, die die geringstmögliche Ausfallzeit erfordert, an der jedoch am schwierigsten zu arbeiten ist.

Dazu müssen Sie einen Master-Slave erstellen, bei dem der Master Ihre aktuelle Version (9.1) und der Slave die neue Version (9.3) ist. Warten Sie dann die erste Synchronisierung (mit dem System, das noch in Produktion ist), schließen Sie danach alle mit der Datenbank verbundenen Personen (die Ausfallzeit beginnt hier), warten Sie, bis der Slave aufholt, fördern Sie ihn (den Slave) zum Master und Leiten Sie alle Clients/Anwendungen auf diese neue Version um. Und du bist fertig.

Die Slony-Dokumentation enthält eine schrittweise Anleitung zu pgrade von PostgreSQL mit Slony .

Welches zu wählen

Nun, wie immer kommt es darauf an:

  • Die Dump + Wiederherstellung ist die zuverlässigste, aber im Allgemeinen die langsamste (die Parallelität kann jedoch zu ziemlich guten Ergebnissen führen).
  • Das pg_upgrade ist eine der besten Optionen für kurze Ausfallzeiten (wenn Sie es verwenden können, beachten Sie die Einschränkungen). Selbst bei großen Datenbanken dauert es oft nur wenige Minuten
  • Die Trigger-Replikation ist zweifellos diejenige, die die geringstmögliche Ausfallzeit (nahe Null) bietet, aber sie ist wirklich schwer zu erreichen, und ich empfehle sie nur erfahrenen Personen (sowohl für PostgreSQL als auch für das Replikationstool).

Ich hoffe ich konnte helfen. Viel Glück.

28
MatheusOl

Führen Sie die folgenden Schritte aus, um Postgres 9.1 auf 9.3 zu aktualisieren:

  1. Erstellen Sie zunächst eine Datei /etc/apt/sources.list.d/pgdg.list mit den folgenden Inhalten für Ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
    
  2. Fügen Sie den folgenden Schlüssel hinzu:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add -
    
  3. Installieren Sie Entwicklertools mit postgres:

    Sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
    
  4. Um unsere Installation zu bestätigen, geben wir "Sudo pg_lsclusters" ein und sehen, wie unsere beiden Versionen von PostgreSQL ausgeführt werden.

  5. Beenden Sie den Postgressql-Dienst:

    Sudo service postgresql stop
    
  6. Löschen Sie den Standard-9.3-Cluster, der bei der 9.3-Installation erstellt wurde.

    Sudo pg_dropcluster --stop 9.3 main
    
  7. Erstellen Sie einen neuen 9.3-Cluster aus dem vorhandenen 9.1-Cluster.

    Sudo pg_upgradecluster 9.1 main
    
  8. Stellen Sie sicher, dass der neue Cluster geladen wird und wir PostgreSQL 9.3 ausführen.

    Sudo service postgresql start 9.3
    
  9. Wenn alles funktioniert, gehen Sie zu 9.1 Cluster.

    pg_dropcluster --stop 9.1 main
    

Weitere Informationen finden Sie unter diesem Link

7
Snehal Parmar

Dies könnte sehr nützlich sein:

https://Gist.github.com/ibussieres/11262268

Es ist für 12.04, aber ich vermute, es ist ziemlich übertragbar.

0
IanBussieres