Die Postgres-Datenbanken, die von den Synology apps video station, photo station, media server, usw. als Repository verwendet werden sind bis dato nur teilweise von den Synology Backup Tools abgedeckt. Eine Sicherung dieser Datenbanken ist für folgende Einsatzzwecke sinnvoll:
- Sicherung der Datenbanken gegen Administrationsfehler, etc. (selbe Diskstation, HDDs bleiben gleich)
- Migration von einer Diskstation auf ein anderes Modell ohne Verlust der Datenbanken (neue Diskstation, HDDs bleiben gleich)
- Synchronisierung gemeinsamer Ordner für Desaster Recovery, kein Verlust der Datenbanken (Backup/Desaster Recovery-Diskstation, separate HDDs)
- Reduzierung der Laufzeiten für Index/Thumbnail-Erstellung nach Umstellungen (vor allem für Diskstation ohne floating point unit)
Skripte für Backup und Restore
Zunächst einmal lege ich einen gemeinsamen Ordner „config“ an in dem später ein Shell-Skript für Backup und Restore der Postgres Datenbanken erstellt wird. Das erzeugt das Verzeichnis /volume1/config/ auf der Festplatte des NAS.
Beim Anlegen der Shellskripte über Windows ist auf korrekten Zeilenumbruch im Editor zu achten! Deshalb bevorzuge ich das Anlegen im Editor vi auf Linux. Eine Alternative unter Windows wäre z.B. notepad++.
Nun mit dem Windows-Programm Putty bzw. unter Linux mit ssh als Benutzer root am Synology NAS anmelden… (Administrator-Kennwort erforderlich!)
Zunächst lasse ich mir die vorhandenen Postgres Datenbanken sowie die installierte Version anzeigen und wechsle dann in den gemeinsamen Ordner config.
nas> /usr/syno/pgsql/bin/psql -U admin -l List of databases Name | Owner | Encoding ----------------+-------+----------- download | admin | SQL_ASCII mediaserver | admin | SQL_ASCII photo | admin | SQL_ASCII postgres | admin | SQL_ASCII synolog | admin | SQL_ASCII synosnmp | admin | SQL_ASCII template0 | admin | SQL_ASCII template1 | admin | SQL_ASCII video_metadata | admin | SQL_ASCII (9 rows) nas> /usr/syno/pgsql/bin/psql -U admin -c "select version();" template1 version ----------------------------------------------------------------------------------------------------------- PostgreSQL 8.3.21 on powerpc-unknown-linux-gnu, compiled by GCC powerpc-none-linux-gnuspe-gcc (GCC) 4.3.2 (1 row) nas> /usr/syno/pgsql/bin/psql --version psql (PostgreSQL) 8.3.21 nas> cd /volume1/config/ nas> vi backup_postgres.sh
Zunächst wird das Backup-Skript angelegt: mit i wie insert in den Eingabemodus wechseln, nun folgenden Text einfügen (bei Putty Zwischenablage via Rechtsklick einfügen):
Es sollen die Datenbanken der Synology apps gesichert werden, d.h. es muß nur ein Teil der Postgres DBs gesichert werden. Technisch gesehen wird das Postgres Sicherungskommando pg_dump als Benutzer admin (schema owner) ausgeführt. Dabei ist wichtig zu wissen, dass Synology auch BLOBs verwendet, die standardmäßig nicht gedumpt werden.
# list postgres databases /usr/syno/pgsql/bin/psql -U admin -l # backup postgres databases (media server, photo/video/download station) # backup im ASCII-mode inkl. blobs rm /volume1/config/mediaserver.sql /usr/syno/pgsql/bin/pg_dump -U admin -C -F p -b -v -f /volume1/config/mediaserver.sql mediaserver rm /volume1/config/photo.sql /usr/syno/pgsql/bin/pg_dump -U admin -C -F p -b -v -f /volume1/config/photo.sql photo rm /volume1/config/video_metadata.sql /usr/syno/pgsql/bin/pg_dump -U admin -C -F p -b -v -f /volume1/config/video_metadata.sql video_metadata rm /volume1/config/download.sql /usr/syno/pgsql/bin/pg_dump -U admin -C -F p -b -v -f /volume1/config/download.sql download
>> mit ESC in den Befehlsmodus wechseln und mit :wq speichern und schließen
nas> vi restore_postgres.sh
Nun wird das Restore-Skript angelegt:
Im Skript werden zunächst abhängige Dienste gestoppt, alle zuvor im Backup-Skript gesicherten Datenbanken explizit gelöscht und wiederhergestellt aus den Dumps und zum Schluß wieder die Dienste gestartet.
# stop indexing and thumbnails /usr/syno/etc/rc.d/S66synoindexd.sh stop /usr/syno/etc/rc.d/S77synomkthumbd.sh stop /usr/syno/etc/rc.d/S88synomkflvd.sh stop # list postgres databases /usr/syno/pgsql/bin/psql -U admin -l # drop and restore postgres databases (media server, photo/video/download station) su - admin /usr/syno/pgsql/bin/dropdb mediaserver /usr/syno/pgsql/bin/dropdb photo /usr/syno/pgsql/bin/dropdb video_metadata /usr/syno/pgsql/bin/dropdb download /usr/syno/pgsql/bin/psql -U admin -d template1 -f /volume1/config/mediaserver.sql /usr/syno/pgsql/bin/psql -U admin -d template1 -f /volume1/config/photo.sql /usr/syno/pgsql/bin/psql -U admin -d template1 -f /volume1/config/video_metadata.sql /usr/syno/pgsql/bin/psql -U admin -d template1 -f /volume1/config/download.sql # list postgres databases /usr/syno/pgsql/bin/psql -U admin -l # start indexing and thumbnails /usr/syno/etc/rc.d/S66synoindexd.sh start /usr/syno/etc/rc.d/S77synomkthumbd.sh start /usr/syno/etc/rc.d/S88synomkflvd.sh start
regelmäßiges Backup
Das Backup-Skript kann dann z.B. über den Aufgabenplaner regelmäßig gestartet werden. Im Synology diskstation manager:
Erstellen > Benutzerdefiniertes Skript > Vorgang „backup_postgres“ > Benutzer „root“ > benutzerdef. skript „/volume1/config/backup_postgres.sh“ > Zeitplan …
Der gemeinsame Ordner „config“ mit den skripten kann regelmäßig via Datensicherung / Synchronisierung gemeinsamer Ordner gesichert werden.
Restore
Zunächst media server, photo/video/download station stoppen.
Zum Wiederherstellen der Postgres Datenbanken via Putty/shh anmelden und das Skript als root auf der gewünschten DS ausführen.
/volume1/config/restore_postgres.sh
Vorsicht! Alle DBs die im Skript aufgeführt sind werden vor dem Restore gelöscht. Benutzen sollte das nur jemand, der verstanden hat, was im Skript passiert…
Man kann natürlich auch nur einzelne Datenbanken rücksichern.
Erfahrung
Ich habe meine HDDs von einer DS411j auf DS413 laut Synology-Leitfaden migriert und mit obiger Lösung einen Verlust der mühsam erstellten video station Datenbank, etc. entgegengewirkt.
Es war auch problemlos möglich die Ordner audio/video/photo mittels gemeinsamer Ordner Synchronisierung auf eine DS110j zu replizieren und mit obiger Lösung die postgres-DBs mitzunehmen. Die Applikationen sollten zuvor auf der Ziel-DS bereits installiert und angehalten sein.