PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL 9.0-Sicherung und -Wiederherstellung

In PostgreSQL sind Backup &Recovery im Vergleich zu anderen Datenbanken sehr benutzerfreundlich. Viele von ihnen werden dem nicht zustimmen, ok, lass uns nicht in die Debatte geraten. Was Backups betrifft, PostgreSQL unterstützt kein INCREMENTAL BACKUP, es gibt jedoch sehr konsistente Backup-Tools und Workarounds auf Betriebssystemebene, um dieses Ziel zu erreichen.

Meine bildliche Präsentation zu PostgreSQL Backup and Recovery gibt eine vollständige konzeptionelle Vorstellung. Wenn Sie sich das Diagramm ansehen, können Sie erkennen, welche Sicherungen zum Wiederherstellen oder Wiederherstellen verwendet werden können.

Logische Sicherung

Die Dienstprogramme pg_dump, pg_restore und pg_dumpall, die für logische Sicherungen verwendet werden. pg_dump und pg_restore helfen beim Erstellen von Backups für Datenbankebene, Schemaebene und Tabellenebene. Pg_dumpall wird für den Dump auf Clusterebene verwendet.

Drei Formate werden unterstützt:pg_dump, einfaches SQL-Format, benutzerdefiniertes Format und Tar-Format. Dumps im benutzerdefinierten und Tar-Format sind mit dem Dienstprogramm pg_restore kompatibel, während Dumps im einfachen SQL-Format mit dem Dienstprogramm psql für die Wiederherstellung kompatibel sind.

Nachfolgend finden Sie Beispiele für die einzelnen Sicherungsebenen und die zugehörigen Wiederherstellungsbefehle.

Hinweis:Legen Sie die Standardeinstellungen für PGDATABASE, PGUSER, PGPASSWORD und PGPORT in .bash_profile (Umgebungsvariablen in Windows)

fest

Dump und Wiederherstellung im einfachen SQL-Format

$ pg_dump -U username -Fp dbname  >  filename
or
$ pg_dump -U username dbname -f filename
or
$ pg_dump -Fp -U username dbname -f filename

For restoring use psql command

$ psql -U username -f filename dbname
or
postgres=# i SQL-file-name //in psql terminal with i option

Benutzerdefiniertes Format

$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp

Tar-Format

$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
or
$ cat tar-file.tar | psql -U username dbname

Hinweis:Dumps auf Schemaebene und Tabellenebene können auf die gleiche Weise ausgeführt werden, indem verwandte Optionen hinzugefügt werden.

Dump auf Cluster-Ebene:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Es gibt die beste Möglichkeit, Dumps zu nehmen und Methoden wiederherzustellen. Insbesondere das Buch „PostgreSQL 9 Administration Cookbook – 2010“ von Simon Riggs und Hannu Krosing ist eine gute Möglichkeit, mit PostgreSQL Backup and Recovery zu beginnen, veröffentlicht von www.2ndQuadrant.com.

Physische Sicherung (Dateisystemsicherung)

Cold-Backup:

Bei der Cold-Sicherung handelt es sich um eine einfache Sicherung des Dateisystems des /data-Verzeichnisses, wenn die Postgres-Instanz heruntergefahren ist. Um eine in sich konsistente Sicherung des Datenverzeichnisses zu erreichen, sollte der Datenbankserver vor dem Kopieren heruntergefahren werden. PostgreSQL bietet die Flexibilität, pg_xlog und pg_tblspce über Softlink in verschiedenen Einhängepunkten zu halten. Verwenden Sie beim Kopieren des Verzeichnisses /data einschließlich der Daten des Softlinks den folgenden Befehl.

tar czf backup.tar.gz $PGDATA
or
cp -r $PGDATA /backup/
or
rsync -a $PGDATA /wherever/data

Hot-Backup (Online-Backup):

Bei Hot Backup ist der Cluster betriebsbereit und die Datenbank sollte sich im Archivprotokollmodus befinden. Zwei Systemfunktionen benachrichtigen die Instanz über das Starten und Stoppen des Hot-Backup-Prozesses (pg_start_backup(),pg_stop_backup()). Bevor wir mit der Online-Sicherung fortfahren, lassen Sie uns den Modus für das Datenbankarchivprotokoll besprechen, der für Online-Sicherungen obligatorisch ist.

WAL-Archivierung aktivieren:

Kommende Posts von mir werden kurz über PITR / Tunning WAL etc. berichten, derzeit schauen wir uns WAL Archiving an. Im PostgreSQL-Datenbanksystem „schreibt“ die eigentliche Datenbank in eine zusätzliche Datei namens Write-Ahead-Log (WAL) auf die Festplatte. Es enthält eine Aufzeichnung von Schreibvorgängen, die im Datenbanksystem vorgenommen wurden. Im Falle eines Absturzes kann die Datenbank anhand dieser Aufzeichnungen repariert/wiederhergestellt werden.

Normalerweise werden die Write-Ahead-Protokolle in regelmäßigen Abständen (als Checkpoints bezeichnet) mit der Datenbank abgeglichen und dann gelöscht, da sie nicht mehr benötigt werden. Sie können die WAL auch als Backup verwenden, da es eine Aufzeichnung aller in die Datenbank vorgenommenen Schreibvorgänge gibt.

Konzept der WAL-Archivierung:

Das Write-Ahead-Log besteht aus jeweils 16 MB großen, sogenannten Segmenten. Die WALs befinden sich im Verzeichnis pg_xlog und es ist das Unterverzeichnis von ‘data directory’. Die Dateinamen werden numerisch in aufsteigender Reihenfolge nach PostgreSQL-Instanz benannt. Um eine Sicherung auf Basis von WAL durchzuführen, benötigt man eine Basissicherung, dh eine vollständige Sicherung des Datenverzeichnisses und der WAL-Segmente zwischen der Basissicherung und dem aktuellen Datum.

Die Konfiguration der Archivierung von WAL-Segmenten kann durch Setzen der beiden Konfigurationsparameter archive_command und archive_mode in der postgresql.conf gewählt werden. Um den Cluster in den Archivprotokollmodus zu versetzen, ist RESTART erforderlich.

archive_mode= on/off (boolean parameter)
archive_command = 'cp –i %p / Archive/Location/ f% '

Hinweis: %p für die zu kopierende Datei mit Pfad als Dateiname und % f ohne Verzeichniseintrag für die Zieldatei.

Weitere Informationen zum Archiver-Prozess finden Sie im Beitrag PostgreSQL 9.0 Memory &Processes.

Online-Sicherung:

So erstellen Sie eine Online-Sicherung:

Step 1 : Issue pg_start_backup('lable') in the psql terminal
postgres=# select pg_start_backup('fb');
Step 2 : OS level copy the $PGDATA directory to any Backup Location
$ cp -r $PGDATA /anylocation
Step 3 : Issue pg_stop_backup() in psql terminal.
postgres=# select pg_stop_backup();

Hinweis: Es ist nicht erforderlich, dass diese beiden Funktionen in derselben Datenbankverbindung ausgeführt werden. Der Sicherungsmodus ist global und persistent.

In PostgreSQL gibt es keinen Katalog zum Speichern der Start- und Stoppzeit der Online-Sicherung. Wenn jedoch eine Online-Sicherung ausgeführt wird, werden einige der Dateien erstellt und gelöscht.

pg_start_backup(‘label’) und pg_stop_backup sind die beiden Systemfunktionen zur Durchführung der Online-Sicherung. Mit pg_start_backup(‘label’) wird eine Datei backup_label im Verzeichnis $PGDATA und mit pg_stop_backup() eine Datei ‘wal-segement-number.backup’ unter $PGDATA/pg_xlog erstellt. Backup_label gibt die Startzeit und den Checkpoint-Standort des WAL-Segments an und benachrichtigt auch die PostgreSQL-Instanz, dass sich der Cluster im BACKUP-MODE befindet. Die Datei „wal-segment-number.backup“ im Verzeichnis „$PGDATA/pg_xlog“ beschreibt die Start- und Stoppzeit, den Checkpoint-Standort mit der WAL-Segmentnummer.

Hinweis:Nach pg_stop_backup() wird die Datei backup_label von der PostgreSQL-Instanz gelöscht.

Posten Sie Ihre Kommentare, Vorschläge.