Betreibt man PostgreSQL auf einem Server, der Cron-Jobs erlaubt, so kann man einzelne PostgreSQL-Datenbanken mit dem folgenden Skript elegant sichern:

PostgreSQL Backup: Postgres Datenbank täglich sichern

Das script benötigt folgende Parameter im Setup-Abschnitt:

  • BACKUP_DIR: Der Zielordner für alle Backups.
  • TIMESTAMP: Der Zeitstempel. Daraus werden die Unterordner für die einzelnen Backups generiert. Dieser Parameter bleibt normalerweise unverändert.
  • HOLD_DAYS: Die Anzahl der Tage, die als Datensicherung vorgehalten werden. Nach Ablauf werden alte Postgres Backups automatisch gelöscht.
  • DB_USR, DB_PWD, DB_NAME: Benutzer, Passwort und Name der zu sichernden Postgres Datenbank.
  • DB_DUMP_CMD: Der Pfad zu pg_dump, dem Datenank-Dump Tool von Postgres.
#!/bin/bash
#
# backup-postgres.sh 1.0.1
#
# Dumps a Postgres database to a file.
# Backup files are created in a folder named by the current date.
# Folders exceeding the defined hold time are purged automatically.
#
# (c)2019 Harald Schneider
#

# Setup.start
#

HOLD_DAYS=7
BACKUP_DIR="BACKUP_FOLDER_HERE"
TIMESTAMP=$(date +"%F")

DB_USR="postgres"
DB_PWD="DB_PASSWORD_HERE"
DB_NAME="DB_NAME_HERE"

# Use this on Linux
#
DB_DUMP_CMD=/usr/bin/pg_dump

#
# Setup.end


# Backup
#
echo
echo "Starting backup ..."
mkdir -p "$BACKUP_DIR/$TIMESTAMP"

echo "Writing file $BACKUP_DIR/$TIMESTAMP/$DB_NAME.gz"
PGPASSWORD=$DB_PWD $DB_DUMP_CMD -U $DB_USR $DB_NAME | gzip > "$BACKUP_DIR/$TIMESTAMP/$DB_NAME.gz" 

echo "Cleaning up ..."
find $BACKUP_DIR -maxdepth 1 -mindepth 1 -type d -mtime +$HOLD_DAYS -exec rm -rf {} \;
echo "-- DONE!"

Viel Spass beim täglichen Backup :-)