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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/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 :-)