PostgreSQL Sicherungen und Wiederherstellung
Sicherungen
Nine erstellt täglich zwischen 01:00 und 02:00 Uhr Sicherungen der Postgres Datenbanken auf Ihrem Managed Server. Diese Sicherungen werden 10 Tage lokal vorgehalten sowie mit der täglichen Sicherung Ihres Servers auf unsere Backupsysteme übertragen.
Mittels des Ihnen zur Verfügung stehenden Benutzers www-data
können Sie auf die lokalen Sicherungen zugreifen, um diese bei Bedarf zu archivieren, bei Ihnen lokal zu verwenden oder direkt auf dem System wiederherzustellen.
Die Sicherungen werden im Verzeichnis /home/database-backup/postgresql/
hinterlegt. Alle Sicherungen werden in Verzeichnissen mit folgendem Zeitschema versioniert:
2021-12-06-0134
Über den symbolischen Link /home/database-backup/postgresql/latest/
gelangen Sie zur neuesten Sicherung.
Im Ordner customer
finden Sie die Sicherungen aller von Ihnen angelegten Datenbanken. Sollten Sie lediglich an der Struktur einer Datenbank interessiert sein, so finden Sie diese im Verzeichnis structure
.
Zusätzliche Sicherungen erstellen
Um Ihnen die Erstellung weiterer Sicherungen zu ermöglichen, haben wir das Script, welches wir zur Erstellung der Sicherungen nutzen, für den Aufruf per sudo
durch den Benutzer www-data
freigegeben:
www-data@nine01:~ $ sudo nine-postgresql-backup
2021-12-06T09:54:19+01:00 Dumped and compressed database 'nmd_frontend_production' in 53 seconds
2021-12-06T09:55:04+01:00 Dumped and compressed database 'nmd_frontend_staging' in 45 seconds
Wiederherstellung
Innerhalb der einzelnen Sicherungen finden Sie die Datei restore.sh
, z.B. unter /home/database-backup/postgresql/2021-12-06-0134/restore.sh
.
Hier werden alle Datenbanken inklusive der Dateipfade der Sicherung aufgelistet. Die Inhalte können Sie kopieren und auf Ihre Bedürfnisse anpassen. Die kommentierten Einträge sind dabei für eine Wiederherstellung in der Ursprungsdatenbank gedacht.
Die Angabe des Benutzernamens -U nmd_
muss vervollständigt bzw. auf den gewünschten Benutzernamen angepasst werden.
...
# Single database restores
# zstdcat /home/database-backup/postgresql/2021-12-06-0134/customer/nmd_frontend_production/nmd_frontend_production.zst | pg_restore -d nmd_frontend_production -O -x -c --if-exists -U nmd_
# zstdcat /home/database-backup/postgresql/2021-12-06-0134/customer/nmd_frontend_staging/nmd_frontend_staging.zst | pg_restore -d nmd_frontend_staging -O -x -c --if-exists -U nmd_
Einträge oberhalb der Zeile # Single database restores
sind für den Gebrauch durch Mitarbeiter von Nine gedacht und können nicht durch unprivilegierte Benutzer ausgeführt werden.
Während der Wiederherstellung können folgenden Warnungen auftreten:
pg_restore: WARNING: no privileges could be revoked for "public"
pg_restore: WARNING: no privileges were granted for "public"
Diese Warnungen können ignoriert werden, da die Rechte der Benutzer bereits korrekt gesetzt sind.
Parameter
Die folgenden Parameter werden im Skript restore.sh
verwendet:
-U (--username
): Der Datenbankbenutzer der verwendet werden soll
-d (--dbname
): Legt die Zieldatenbank fest
-O (--no-owner
): Diese Option unterdrückt alle Befehle zum Festlegen der Eigentümerschaft von Objekten. Alle importierten Objekte werden dem Datenbankbenutzer, der mittels -U (--usename) übergeben wurde, zugewiesen.
-x (--no-acl / --no-privileges
): Diese Option verhindert das erneute Einspielen der bereits vorhandenen Zugriffsberechtigungen
-c (--clean
): Diese Option löscht bestehenden Datenbankobjekte
--if-exists
: Diese Option wird benötigt, wenn --clean
verwendet wird. Bei Auslassen der Option würden Fehlermeldungen auftreten, sollten Objekte in der Zieldatenbank nicht vorhanden sein.
Wiederherstellung in Quelldatenbank
Zur Wiederherstellung einer Sicherung können Sie folgenden Befehl verwenden. Hierbei wird die Sicherung der Datenbank nmd_frontend_staging
in die gleichnamige Datenbank wiederhergestellt. Vorab werden alle bestehenden Daten der Datenbank entfernt:
zstdcat /home/database-backup/postgresql/2021-12-06-0134/customer/nmd_frontend_staging/*.zst | pg_restore -d nmd_frontend_staging -O -x -c --if-exists -U nmd_frontend_staging
Der Parameter -U
übergibt den Datenbankbenutzernamen an das pg_restore
Kommando. Das Kennwort des Datenbankbenutzers wird bei der Ausführung interaktiv abgefragt.
Bitte beachten Sie dass Sie den Benutzernamen und das Kennwort des Datenbankbenutzers angegeben müssen und hier nicht die Zugangsdaten des www-data
Benutzers gefragt sind. Sollten Sie diese Informationen nicht zur Hand haben, so können diese aus der Konfiguration Ihrer Applikation ausgelesen werden.
Wiederherstellung in eine andere Datenbank
Die Wiederherstellung kann bei Bedarf auch in eine abweichende Datenbank vorgenommen werden. Hierbei muss der Name der Zieldatenbank angepasst werden. Wir empfehlen ausserdem, zunächst die Struktur in die neue Datenbank einzuspielen:
# Wiederherstellen der Struktur
zstdcat /home/database-backup/postgresql/2021-12-06-0134/structure/nmd_frontend_staging.zst | pg_restore -d nmd_frontend_staging_restore -O -x -c --if-exists -U nmd_frontend_staging_restore
# Wiederherstellen der Daten
zstdcat /home/database-backup/postgresql/2021-12-06-0134/customer/nmd_frontend_staging/nmd_frontend_staging.zst | pg_restore -d nmd_frontend_staging_restore -O -x -c --if-exists -U nmd_frontend_staging_restore
Wenn Sie eine Wiederherstellung in eine andere Datenbank durchführen möchten, so muss diese bereits existieren oder per nine-manage-databases
angelegt werden.
Wiederherstellung einzelner Tabellen
Statt alle Tabellen wiederherzustellen, kann ebenso eine einzelne Tabelle ausgewählt und importiert werden. Dies geschieht mittels des Parameters -t
sowie der Angabe des Namens der Tabelle.
Wichtige Information:
Beim Wiederherstellen einzelner Tabellen kann pg_restore mit dem -t
Flag
keine Abhängigkeiten zu anderen Datenbank Objekten erkennen. Darum gibt es keine Garantie, dass die Wiederherstellung einer einzelnen Tabelle in eine leere Datenbank ohne Fehler durchlaufen wird. pg_restore's -t
Flag kann auch die zur Tabelle gehörenden Unterobjekte wie Indexes nicht wiederherstellen.
zstdcat /home/database-backup/postgresql/2021-12-06-0134/customer/nmd_frontend_staging/nmd_frontend_staging.zst | pg_restore -d nmd_frontend_staging -O -x -c --if-exists -U nmd_frontend_staging -t tablename
Weitere Informationen
Zeitpunkt der Sicherungen
Sicherungen von Datenbanken erzeugen in aller Regel eine erhöhte Last auf Ihrem System. Daher haben wir einen Zeitraum in der Nacht gewählt, der üblicherweise weniger frequentiert ist. Falls der Zeitraum zwischen 01:00 und 02:00 Uhr für Ihre Applikation(en) ungünstig sein sollte, können wir diesen gerne anpassen.
Kompression der Sicherungen
Wir verwenden den Zstandard-Algorithmus zur Kompression der Sicherungen. Dieser bietet eine hervorragende Balance aus Geschwindigkeit, Kompression und Ressourcenbedarf und übertrifft die etablierten Algorithmen teils deutlich.
Sollten Sie die Sicherungen für die Verwendung auf einem System benötigen, auf dem die zst Binärpakete nicht zur Verfügung stehen, so raten wir dazu die Sicherungen auf Ihrem Server selbst zu entpacken und erneut zu komprimieren:
www-data@nine01:~ $ mkdir dump_recompress
www-data@nine01:~ $ cp /home/database-backup/postgresql/latest/customer/nmd_frontend_staging/* dump_recompress/ ; cd dump_recompress/
# Die Option "--rm" löscht die zst Archive nach dem Entpacken
www-data@nine01:~/dump_recompress $ unzstd --rm *.zst
nmd_frontend_staging.zst: 3732915490 bytes
www-data@nine01:~/dump_recompress $ bzip2 *
www-data@nine01:~/dump_recompress $ ls -l *.bz2
-rw-r----- 1 www-data www-data 432683536 Dec 6 13:24 nmd_frontend_staging.bz2
Bitte achten Sie darauf, keine Sicherungen öffentlich zugänglich auf dem Webserver zu hinterlegen.