Datenverzeichnis kopieren und aktivieren

Hallo allerseits,

ich freue mich, dieses Forum gefunden zu haben und komme gleich mit einer Fragestellung (die aber auch ein Problem darstellt). Ich hoffe, ich bin dabei im richtigen Unterforum gelandet.

Auf einer Festplatte befindet eine vollständige Linuxinstallation (Debian 5 - lenny) mit einigen postgresql Datenbanken vs 8.3.
Da das Linuxsystem nicht mehr bootfähig ist, habe ich einen neuen Debian-Server aufgesetzt - natürlich ebenfalls Version 8.3.
Die Daten, die sich im Verzeichnis

/var/lib/postgresql/8.3/main/base

befinden habe ich auf den neuen Server kopiert. Nur damit kann das System so noch nichts anfangen.

Die Frage lautet also:
Wie kann man mit den Daten eines bestehenden PG-Servers umziehen - und zwar auf Dateiebene?
Denn ein Dump ist ja nicht möglich, da dazu ein funktionierender Server erst einmal Zugriff auf die Daten haben müsste.

Ich bin für alle Antworten und Hinweise dankbar.

Grüße
Dirk

Wenn das alte System sauber runtergefahren wurde und Du eine exakt gleiche Vesion jetzt hast und alle Dateien befinden sich am richtigen Ort, dann startet das wieder. Sonst nicht. Damit ist auch gesagt, was Du zu beachten hast.

Andreas

Gleiche Datenbankversion, gleiche Betriebssystemversion, gleiche Hardwarearchitektur, …

Hallo Andreas,

vielen Dank

alle Dateien befinden sich am richtigen Ort,

Aber welche Dateien?
Oder sollte es tatsächlich reichen,"/var/lib/postgresql/8.3/main/base" zu übertragen?
Gruß
Dirk

Unter bestimmten Umständen reicht das. Wenn das nicht reicht, ist es sowieso viel mehr Arbeit, unter Umständen sogar unmöglich.

Eigentlich hat man für solche Fälle ein richtiges Backup an einem externen Ort.

Hallo ads,

Gleiche Datenbankversion

Logisch.

gleiche Hardwarearchitektur, …

Sogar identischer Rechner

gleiche Betriebssystemversion,

Leider nicht ganz.

Allerdings dürfte das ja eigentlich keinen Einfluss auf die Datenorganisation von PG haben. Oder?
Es geht mir auch gar nicht unbedingt darum, den alten Stand 1:1 wiederherzustellen, sondern vorhandene Daten dem Datenbanksystem irgendwie unterzujubeln.

Man könnte die Frage daher (von meinem konkreten Problemfall losgelöst) auch dahingehend umformulieren:
Wohin schreibt PG beim erstellen einer DB?Ich meine, über das blosse erstellen eines Verzeichnisses in**/var/lib/postgresql/8.3/main/base** hinaus?

Vielen Dank.
Dirk

Die Daten liegen in einem binären Format vor. Dieses Format ist unter anderem von diversen Compilereinstellungen (darum gleiches OS -> gleicher Compiler für alles). Das Format ist auch von diversen ./compile Optionen (daher die gleiche Version im gleichen OS) abhängig. Weiterhin kann man z. B. nicht ein Verzeichnis einer 32-Bit Version auf einem 64-Bit System starten, das funktioniert (aus offensichtlichen Gründen) auch nicht.

Alles gute Gründe, ein vernünftiges Backup zu haben.

Hallo ads,

unsere Antworten haben sich gerade überschnitten.

Eigentlich hat man für solche Fälle ein richtiges Backup an einem externen Ort.

Da hast du schon mal ziemlich recht.

Unter bestimmten Umständen reicht das.

Weisst du auch welche?

Wenn das nicht reicht, ist es sowieso viel mehr Arbeit, unter Umständen sogar unmöglich.

Die Antwort hatte ich befürchtet.

Trotzdem vielen Dank

Dirk

Gut, dann setz eines auf. Ist nicht schwer. Ich helfe gern dabei.


Weisst du auch welche?

Die wichtigsten habe ich oben genannt. Vielleicht kommt man von da aus weiter, aber es ist ein Try&Error Prozess.

So, ich noch mal.
Ich habe es hin bekommen.
Es reicht tatsächlich das Verzeichnis /var/lib/postgresql/8.3/main/
zu kopieren. Allerdings hatte ich einen abweichenden Zeichensatz.
Das war ziemlich fummelig, bis ich auch alles verstanden hatte.
Kurze Skizzierung der funktionierenden Migration:

  1. richtigen Zeichensatz hinzufügen: dpkg-reconfigure locales
  2. DB-Server installieren
  3. Server herunterfahren
  4. /var/lib/postgresql/8.3/main/ löschen
  5. Datenbank neu anlegen: /usr/lib/postgresql/8.3/bin/initdb -D /var/lib/postgresql/8.3/main -E LATIN9 --locale=de_DE@euro --lc-ctype=de_DE@euro --lc-messages=de_DE@euro --lc-monetary=de_DE@euro --lc-numeric=de_DE@euro --lc-time=de_DE@euro --lc-collate=de_DE@euro
  6. /var/lib/postgresql/8.3/main/ durch die Sicherheitskopie ersetzen
  7. User postgres als Owner und Gruppe setzen - wichtig - KEINE Berechtigungen für Gruppe und Welt setzen.
  8. Server wieder hochfahren
  9. evtl. User passwort setzen (vorher login postgres): psql -c “ALTER ROLE postgres WITH PASSWORD ‘’;”)
  10. Evtl nicht unwichtige Nacharbeit: dpkg-reconfigure locales (wieder zurücksetzen)

Das war mein Weg. Vielleicht hilft es mal jemandem.
Danke.

Dirk

Wichtiger Hinweis: dass dies klappt ist eher die Ausnahme, nicht die Regel. Dafür spielen zu viele Faktoren eine Rolle.