PostgreSQL Online-Backup und Point-In-Time Backup
Das objektrelationale Datebank-Managementsystem PostgreSQL erlaubt, seit der Version 8.0, das Erstellen von einem Online-Backup und das Wiederherstellen von Daten mittels eines Verfahrens, das sich Point-In-Time recovery nennt. Folgende Anleitung zeigt Ihnen, wie Sie den Mechanismus aktivieren, ein Backup anlegen und wie Sie Daten mit Hilfe einer Sicherung wiederherstellen können.
Damit das Point-In-Time Recovery Backup überhaupt funktioniert, müssen Sie dafür sorgen das PostgreSQL volle xlog/WAL Dateien wegsichert (Write-Ahead-Log). Das erreichen Sie durch einen Eintrag in der postgres.conf namens archive_command. Hier stellen Sie ein, wie und wohin die Dateien gespeichert werden.
archive_command = 'cp %p /verzeichnis/zum/xlog/backup/%f'
Mit Hilfe des folgenden Batch für einen Cronjobs können Sie in regelmässigen Intervallen ein Onlinebackup anfertigen.
su - postgres -c psql -c select pg_start_backup('Taegliches Backup'); template1
cp -r /var/lib/pgsql/data /verzeichnis/fuer/mein/backup
su - postgres -c psql -c select pg_stop_backup(); template1
Ich empfehle, die Befehle zum Testen erst einmal nur in die Konsole einzugeben. Der SQL Befehl "select pg_start_backup('Tägliches Backup');" sorgt dafür, dass die Datenbank einen Backup/Savepoint markiert und die Datenbank in einen Modus versetzt. Ein einfaches Filecopy erlaubt die Datensicherung ohne Dateifehler oder Inkosistenzen. Ab diesem Zeitpunkt lässt sich die Datenbank bis zu jedem Zeitpunkt wieder herstellen.
Mit "cp -r /var/lib/pgsql/data /verzeichnis/fuer/mein/backup" sichern Sie das Datenbankverzeichnis.
Der letzte Befehl sorgt dafür, dass die Datenbank wieder den "normalen" Betrieb aufnimmt.
Wiederherstellen der Daten
In einer Datei namens recovery.conf, können Sie jetzt Einstellungen vornehmen, die der Datenbank mitteilen, bis zu welchen Zeitpunkt die Daten aus den Archivierten xlogs wiederhergestellt werden sollen.
#Linux
restore_command = 'cp /verzeichnis/zum/xlog/backup/%f "%p"'
#Windows
#restore_command = 'copy /verzeichnis/zum/xlog/backup/%f "%p"'
#Zeitpunkt bis wohin die xlogs ausgeführt werden sollen (Zeitpunkt der Wiederherstellung)
recovery_target_time = '2005-11-25 11:34:13'