App-Konfiguration bzw. Postgres DBs auf Synology NAS sichern

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.

Dieser Beitrag wurde unter howto abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.