hmm: Postgres Restore

Hi Leute,

ich habe über einen archive_command backupdateien von meiner Datenbank angelegt. Diese Dateien haben ein archivwal Verzeichnis mit den Header Infos und verzeichnise wo die Base Daten in tar.gz Dateien rumliegen.

Als test habe ich ein Backup für meiner Datenbank erstellt, dann eine Tabelle gelöscht und versuche jetzt diese wieder herzustellen. Dazu nutze ich:

pg_restore -h localhost -d asv -U asv -c <backup-name>.backup

leider sagt mir das system dann, dass die Backup-Datei nicht valide ist.

Wisst ihr wie man Backupdaten in der Postgres Restort?

  1. Hallo hmm,

    ich habe über einen archive_command backupdateien von meiner Datenbank angelegt.

    Nein, das hast du nicht. Dokumentation lesen! archive_command kopiert den WAL, das ist kein Backup. Es kann im Rahmen einer Backup-Strategie genutzt werden, etwa für eine Point-in-Time-Recovery.

    Wisst ihr wie man Backupdaten in der Postgres Restort?

    Backups stellt man mit pg_restore wieder her, das ist soweit richtig. Aber WAL archiving ist kein Backup. Du benötigst ein base backup, von dessen Punkt aus du wieder ansetzen kannst. Im wesentlichen läuft das so: du stellst das base backup wieder her und entfernst alle Dateien im Verzeichnis pg_xlog im Data-Verzeichnis. Wenn du in deinem Base-Backup noch WAL-Dateien hast, die noch nicht archiviert wurden, kopierst du sie nach pg_xlog. Dann startest du die Datenbank im recovery mode; der DB-Server wird sich die WAL-Daten aus dem Archiv-Verzeichnis holen, das du konfiguriert hast. Wenn du zu einem bestimmten Zeitpunkt zurück möchtest, musst du vorher noch einen Endpunkt für das WAL-Recovery angeben.

    Wenn das erfolgreich verlaufen ist, kannst du die Datenbank wieder im normalen Modus starten.

    Das ist sehr verkürzt, die PostgreSQL-Doku hat da deutlich bessere Dokumentation, etwa das Artikel über Continuous Archiving. Generell würde ich dir aber auch empfehlen, sowas wie pgbarman zu nutzen.

    LG,
    CK

    1. danke, ich habe backup dateien. Ich versuche das hier zu machen:

      24.3.4. Recovering Using a Continuous Archive Backup

      Schritt 1 wäre die postgres zu stoppen, das geht mit pg_ctl stop richtig?

      Wenn ich das eingebe, sagt er mir leider "no database directory specified and environment variable pgdata unset"

      wie finde ich den database directory?

      1. Hallo hmm,

        Schritt 1 wäre die postgres zu stoppen, das geht mit pg_ctl stop richtig?

        Entweder das, oder besser via Init-System deines OS, sonst könnte es sein, dass dein OS das DBMS einfach neu startet. Bei modernen Linuxen wäre das etwa sowas wie systemctl stop postgresql.

        Wenn ich das eingeber sagt er mir leider "no database directory specified and environment variable pgdata unset"

        wie finde ich den database directory?

        Das steht als data_directory in deiner postgresql.conf.

        LG,
        CK

        1. bei

          systemctl stop postgresql

          sagt er mir leider "failed to get d-bus connection: operation not permitted"

          1. Hallo hmm,

            systemctl stop postgresql

            sagt er mir leider "failed to get d-bus connection: operation not permitted"

            Na dann würde ich das mal als root-User oder via sudo mit root-Rechten versuchen.

            LG,
            CK

            1. danke.

              ich habe jetzt eine recovery.conf datei angelegt. führt postgres diese nach neustart automatisch aus?

              1. Hallo hmm,

                ich habe jetzt eine recovery.conf datei angelegt. führt postgres diese nach neustart automatisch aus?

                Wenn sie am richtigen Platz liegt, dann ja.

                LG,
                CK

                1. die datei liegt direkt neben meiner postgresql.conf datei, ist das der richtige ort?

                  nach neustart wurde die dateiendung leider nicht von .conf auf .done geändert.

                  1. Hallo hmm,

                    die datei liegt direkt neben meiner postgresql.conf datei, ist das der richtige ort?

                    Das hängt von deiner Konfiguration ab 😉

                    Per Default muss sie im Data-Directory deiner PostgreSQL-Konfiguration liegen, also z.B. /var/lib/postgresql/10/main bei Ubuntu.

                    nach neustart wurde die dateiendung leider nicht von .conf auf .done geändert.

                    Und was sagt das Logfile?

                    LG,
                    CK