Datensicherung erstellen (Backup)

<< Click to Display Table of Contents >>

Navigation:  Notenmanager Schulversion > Administrator Handbuch > Datensicherung > PostgreSQL Datenbank >

Datensicherung erstellen (Backup)

> Letzte Änderungen am 05.11.2017 <

Sichern der Notenmanager-Datenbank

Für die Sicherung einer PostgreSQL-Datenbank ist das Programm pg_dump vorgesehen, das zusammen mit PostgreSQL installiert wird. Eine genaue Beschreibung des Programms findet sich in der Online-Dokumentation von PostgreSQL.

In der Regel wird das Programm über ein Skript (Batchdatei) aufgerufen und der Aufruf des Skriptes automatisiert (mindestens einmal täglich). Ein Stolperstein dabei ist, das pg_dump einen Benutzernamen und ein Passwort verlangt, das normalerweise interaktiv angegeben werden muss. Da das bei einer automatisierten Sicherung, die meistens wohl nachts läuft, nicht möglich ist, muss pg_dump das Passwort auf eine andere Weise mitgeteilt werden.

Eine Möglichkeit besteht darin, eine Datei .pgpass mit dem Passwort anzulegen (https://www.postgresql.org/docs/9.3/static/libpq-pgpass.html). Alternativ kann auch die Umgebungsvariable PGPASSWORD gesetzt werden.

Das folgende Beispielskript (Windows) setzt die Umgebungsvariable, führt dann das Backup durch und löscht die Umgebungsvariable wieder:

 

set PGPASSWORD=[Passwort für Postgres Benutzer]

"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --no-password  --format custom --blobs --verbose --file C:\Daten\NMDB_Backup\nmdb_%date:~6,4%_%date:~3,2%_%date:~0,2%.backup "bsnmXXXX"

set PGPASSWORD=null

 

Dieses Skript erstellt Datensicherungen mit dem Dateinamen "nmdb_Datum_Uhrzeit.backup" im Verzeichnis C:\Daten\NMDB_Backup.

 

Wichtig: es versteht sich sicherlich von selbst, dass sowohl die Datei mit dem obigen Skript als auch die .pgpass-Datei (sofern verwendet) so auf dem Server abgelegt wird, dass sie vom Zugriff Unbefugter ausgeschlossen sind. Schließlich enthalten sie das Passwort im Klartext.

Hinweis: Durch ein pg_dump wird wirklich nur die jeweils genannte Datenbank gesichert. Die Datenbankbenutzer und ihre Zugangsdaten sind in der Sicherung nicht mit enthalten. Im Falle eines Desaster-Recovery müsste also PostgreSQL gegebenenfalls neu installiert und die Benutzer neu angelegt werden. Erst danach lässt sich dann das Backup mit pg_restore einspielen

Alternativ können Sie mit "pg_dumpall" den gesamten "Datenbank-Cluster" sichern. Das wären dann alle Datenbank (z. B. Notenmanager, ASV, MGSD, ...) mit allen Benutzerkonten.

Sichern der Benutzerkonten

Im Falle eines kompletten Datenverlustes und somit der Notwendigkeit eines Desaster-Recovery muss zunächst der Datenbank-Server neu installiert und anschließend die Benutzerkonten angelegt werden. Erst dann können die gesicherten Datenbank wieder eingespielt werden.

Sofern man die Bezeichnungen der Benutzerkonten und die Passwörter parat hat können die Benutzerkonten z. B. über pgAdmin neu erstellt werden. Einfacher und bequemer ist es aber, wenn man die Benutzerkonten in einer Datensicherung hat.

Eine solche Sicherung kann man erstellen, in dem man "pg_dumpall" mit dem Parameter "--roles-only" aufruft. Hier ein Beispielskript:

 

set PGPASSWORD=[Passwort für Postgres Benutzer]

"C:\Program Files\PostgreSQL\9.2\bin\pg_dumpall.exe" --host localhost --port 5432 --username "postgres" --no-password  --verbose --file C:\Daten\pgroles.backup.sql --roles-only

set PGPASSWORD=null

 

Sichern eines "Datenbank-Clusters"

Sie können auch alle Datenbank, die auf einem PostgreSQL-Server gehostet werden (= "Cluster"), in einem Rutsch sichern. Dabei werden dann auch - wie oben erwähnt - alle Benutzerkonten mitgesichert.

Wichtig: So praktisch dies im ersten Moment klingt, die Sache hat auch einen Haken. Bei der Sicherung des gesamten Clusters mit dem Programm pg_dumpall wird eine Textdatei mit SQL-Befehlen erstellt. Diese Sicherung kann nur mit dem Programm psql bzw. durch ausführen dieses SQL-Scripts wiederhergestellt werden. Es ist somit nicht möglich, nur einzelne Datenbanken aus der Sicherung wiederherzustellen!

Das folgende Beispielskript (Windows) führt eine Cluster-Sicherung durch:

 

set PGPASSWORD=[Passwort für Postgres Benutzer]

"C:\Program Files\PostgreSQL\9.2\bin\pg_dumpall.exe" --host localhost --port 5432 --username "postgres" --no-password  --verbose --file C:\Daten\dumpall_%date:~6,4%_%date:~3,2%_%date:~0,2%.backup.sql

set PGPASSWORD=null