Upgrade von Postgres 9.1 auf 9.3 auf Ubuntu Server


27

Ich habe meinen Produktionsserver (Ubuntu 13.10) mit postgresql 9.1.

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

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

Hauptanliegen ist es, einen Datenverlust oder eine Redundanz der Dateien zu verhindern.


2
Die Postgres-Dokumente sind wirklich gut. google.co.uk/#q=postgres+upgrade+von+9.1+bis+9.3
Philᵀᴹ

Ich bin kein DBA per se (muss nach der Installation von ungeraden Postgres und sogar nach ungeraden mysql schauen;}), und dieser Beitrag ist alt, aber warum sollten Sie eine Ubuntu X.10-Version für prod anstelle einer X.04-Version verwenden? LTS?
Tink

Antworten:


28

Grundsätzlich gibt es drei Möglichkeiten, ein Upgrade von PostgreSQL von verschiedenen Hauptversionen (z. B. 9.1 auf 9.3) durchzuführen.

Upgraden mit pg_dump

Die erste und wenn möglich empfohlene Methode besteht darin, einen Speicherauszug der alten (9.1) Version mit der Binärdatei der neueren (9.3) Version zu erstellen und auf einem neuen Cluster wiederherzustellen, 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, können Sie Folgendes tun:

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

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

Danach können Sie den Speicherauszug in der neuen Instanz wiederherstellen, indem Sie Folgendes verwenden pg_restore:

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

Danach wird empfohlen, ANALYZEauf Ihrer Datenbank auszuführen :

$ vacuumdb --analyze-only mydatabase

(wenn Sie die Zeit leisten können, führen nur --analyzezu auch VACUUMdie Datenbank und aktualisieren die Sichtbarkeit abbildet)

Upgrade mit pg_upgrade durchführen

Eine andere Möglichkeit ist die Verwendung des Beitragespg_upgrade . Mit dieser --linkMethode können Sie PostgreSQL sehr schnell aktualisieren.

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

UPDATE: Bitte verwenden Sie die --checkOption, bevor Sie den endgültigen Befehl ausführen. Bei großen Datenbanken ist es außerdem empfehlenswert, 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 einem Trigger basiert. Wie Slony, Bucardo und Londiste.

Diese Option erfordert die geringstmögliche Ausfallzeit, ist jedoch am schwierigsten zu bearbeiten.

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. Sie warten dann die erste Synchronisierung (mit dem System, das noch in Produktion ist), danach schließen Sie alle mit der Datenbank verbundenen Benutzer (die Ausfallzeit beginnt hier), warten, bis der Slave aufholt, befördern ihn (den Slave) zum Master und Leiten Sie alle Clients / Anwendungen auf diese neue Version um. Und du bist fertig.

Die Slony-Dokumentation bietet eine schrittweise Anleitung zum Upgrade von PostgreSQL mit Slony .

Welches zu wählen

Nun, wie immer hängt es davon ab, wieder aufzunehmen:

  • Die Dump + Wiederherstellung ist die zuverlässigste, aber im Allgemeinen die langsamste (die Parallelität kann jedoch recht gute Ergebnisse liefern).
  • Das pg_upgrade ist eine der besten Optionen für geringe 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 ohne Zweifel diejenige, die die geringstmögliche Ausfallzeit (nahe Null) bietet, aber sie ist wirklich schwer zu erreichen, und ich empfehle sie nur erfahrenen Personen (sowohl auf PostgreSQL als auch auf dem Replikationstool).

Ich hoffe ich konnte helfen. Viel Glück.


Funktioniert pg_upgrade auch von 8.4.17 bis 9.3?
JohnMerlino

@ JohnMerlino: Ja, pg_upgrade kann ein Upgrade von Version 8.3 oder höher durchführen (einschließlich 8.3, 8.4, 9.0, 9.1, 9.2, ...).
MatheusOl

"Verwenden der Binärdatei der neueren (9.3) Version" ist möglicherweise nicht so notwendig. Ich habe es zumindest zum Laufen gebracht, ohne dieses Bit zu tun.
theicfire

@theicfire es hängt tatsächlich von beiden Versionen ab (die alte und die neue), es kann funktionieren oder auch nicht. Tatsächlich wird es in den meisten Fällen funktionieren, mit Ausnahme einiger Fehlermeldungen, die normalerweise ignoriert werden können ... Das offizielle Verfahren besteht darin, die Binärdatei der neueren Version zu verwenden!
MatheusOl

Sie könnten nutzen können pg_dumpalldump alle Datenbanken in einem Rutsch.
Matthieu

7

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

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

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

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Installieren Sie die 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 Sie "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 durch die 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 PostgreSQL 9.3 ausgeführt wird.

    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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.