Esprit & Schmackes

PostgreSQL-Dump als Cronjob

eine mögliche Vorgehensweise, um automatisiert Dumps von den Postgres-Datenbanken zu erstellen so um die 312 Wörter

PostgreSQL bringt einige nützliche Kommandos mit (einfach mal pg_ +Tab+Tab eingeben), unter anderem auch pg_dumpall für einen kompletten SQL-Export der Datenbanken.

Um jetzt wöchentlich als Standarduser einen Dump herzustellen, kann man folgendermaßen vorgehen:

.pgpass-Datei

Die .pgpass-Datei kann zur Authentifizierung verwendet werden und stellt damit eine sichere Alternative zur Übergabe des Passworts als Kommandoparameter (der im Klartext in der Prozessliste zu sehen wäre) dar. Die Datei legt man ins Benutzerverzeichnis. Sie hat folgenden Aufbau:

hostname:port:database:username:password

und erlaubt u. a. auch Wildcards. In dem Fall soll die Authentifizierung für alle Datenbanken auf localhost per Standardport ermöglicht werden. Dementsprechend lautet der Eintrag

*:*:*:postgres:meinscheißgeheimespasswort

Die Datei sollte restriktive Zugriffsrechte (600) bekommen.

Cronjob

Das reine Dump-Kommando sieht folgendermaßen aus:

pg_dumpall -U postgres -h localhost -w > dump.sql

Der Host sowie Benutzername muss immer angegeben werden. Die Option -w verhindert den Password-Prompt, erst dann wird nach der Datei .pgpass im Home-Verzeichnis gesucht.

Der Dump soll wöchentlich ausgeführt, mit 7zip komprimiert und ich per Mail darauf aufmerksam gemacht werden, dass ich das Archiv downloaden kann.
Also erstelle ich ein .sh.Script wie dieses:

#!/usr/bin/env sh
 
cd ~/backup
filename="pg.`date +%d%m%Y`.sql"
pg_dumpall -U postgres -h localhost -w > $filename
 
if [ $? -eq 0 ]; then
        7z a $filename.7z $filename
        rm $filename
        echo "PG-Dump $filename.7z ready to download" | \
        mail -s "Postgres-Backup" my@mail-address.de
 
        exit 0
fi
 
exit 1

mache es per

chmod +x backupscript.sh

ausführbar und trage via

crontab -e

den Cronjob ein:

@weekly /home/user/backup.sh

 

Alternativ kann man den Dump natürlich direkt an die Mail anhängen. Dazu braucht es mutt oder ähnliche Clients, und diese Zeile im Script:

echo "Postgres-Dump attached" | mutt -a "/home/user/backup/$filename.7z" \
-s "PG-Dump" -- my@mail-address.de

 

Kommentare

was zu melden?