PITR funktioniert nicht wie gewünscht ?

Hallo zusammen,
Das PITR funktioniert bei mir nicht so wie gewünscht.
Hier mal was ich gemacht habe:

  1. Mein /data Verzeichnis gelöscht (inkl. pg_xlog)
  2. aus einem Filebackup wiederhergestellt.
    (pg_xlog ist nicht im Filebackup enthalten und bleibt deshalb leer).
  3. recovery.conf enthält nur mit einen copy Befehl
  4. pg gestartet
    -> pg kopiert ein archiviertes WAL File zurück nach pg_xlog und startet
    = alles i.o.
    (Das Verz. pg_xlog enthält nun das aus den archivierten WAL Files zurückkopierte WALFile (…3B) und ein neu erstelltes (…3F))
  5. Nun mache ich einige Inserts in eine Tabelle damit nochmal ein neues WAL File (…40) erstellt wird.
  6. Nun lösche ich die gesammte Tabelle (Truncate)
  7. Nun lösche ich wieder das gesamte /data Verzeichnis lasse aber die Files im pg_xlog (3B, 3F + 40) stehen.
  8. Wiederherstellen des Dataverzeichnises aus dem gleichen Backup wie bei (2)
    (pg_xlog bleib wieder unberührt und enthält immer noch die 3 Files)
  9. Erstellen des recovery.conf mit dem copy Befehl und einer Zeitangabe (recovery_target_time = ‘2009-04-25 14:00:00’ = Zeitpunkt vor dem Truncate)
  10. starten von pg

Für mein Verständniss sollte nun der Datenbestand aus dem Backup PLUS die nach dem Restore erstellten Inserts in der DB drinstehen. Tut aber nicht. Der Datenbestand entspricht dem Datenstand nach dem Restore(ohne die anschliessend eingefügten Daten zwischen Restore (2) und Truncate (6).

Was mache ich wohl falsch ???
Besten Dank für einen Tipp

acki

Was genau steht in recovery.conf?

Und lass dir mal irgendwo mitloggen, welche Dateien PG exakt über das in recovery.conf angegebene Programm haben will.

recovery_conf:
restore_command = ‘cp /pg/wu/arch/pg_xlog/%f %p’
recovery_target_time = ‘2009-04-25 14:00:00’

Wie soll ich denn das mitloggen hinkriegen ?

TIA
acki

Indem du statt dem cp irgendein kleines Skript nimmst, das die Arbeit erledigt - und nebenbei ein Log schreibt.

Kann ich schon machen, ich finde aber das nicht das Kopieren des Files das Problem ist (beim zweiten Starten (10) stehen ja schon alle benöigten WAL-Files im pg_xlog).
Und nur das ‘Nachfahren’ zum target_time ist das Problem.
Oder steh ich da ganz im Wald ?

Wenn ich mich recht erinnere, fordert PG die Dateien über das in recovery.conf definierte Skript an … und dieses findet keine WAL-Datei. Daraufhin gibt es einen Fehler von “cp” und das Recovery stoppt.

Darum solltest du die angeforderten Dateien mitloggen - dann hättest du das gesehen.

Nun das steht ja auch im pg_log File:

LOG: database system was interrupted; last known up at 2009-03-24 15:46:48 CET
LOG: starting archive recovery
LOG: restore_command = ‘cp /pg/wu/arch/pg_xlog/%f %p’
LOG: recovery_target_time = ‘2009-03-25 14:00:00+01’
LOG: restored log file “00000003.history” from archive
LOG: restored log file “00000003000000000000003E.00878E58.backup” from archive
LOG: restored log file “00000003000000000000003E” from archive
LOG: automatic recovery in progress
LOG: redo starts at 0/3E878EA0
cp: cannot stat /pg/wu/arch/pg_xlog/00000003000000000000003F': No such file or directory LOG: could not open file "pg_xlog/00000003000000000000003F" (log file 0, segment 63): No such file or directory LOG: redo done at 0/3E878EA0 LOG: restored log file "00000003000000000000003E" from archive cp: cannot stat /pg/wu/arch/pg_xlog/00000004.history’: No such file or directory
cp: cannot stat /pg/wu/arch/pg_xlog/00000005.history': No such file or directory cp: cannot stat /pg/wu/arch/pg_xlog/00000006.history’: No such file or directory
LOG: selected new timeline ID: 6
LOG: restored log file “00000003.history” from archive
LOG: archive recovery complete
LOG: autovacuum launcher started
LOG: database system is ready to accept connections

Wenn du die Dateien nur in pg_xlog liegen lässt, findet cp die nicht … außerdem darf PostgreSQL die Dateien in pg_xlog umbenennen, überschreiben oder löschen.

Du bist angehalten, alle Dateien mittels archive_command zu sichern, in deinem Fall nach /pg/wu/arch/pg_xlog/. Dann klappt das auch mit dem Restore.

So, und für das Vorlesen der Doku, wohin darf ich jetzt die Rechnung schicken? :wink: