pg_backup.sh - backing up PostgreSQL databases
Poorly written bash script which backups Postgres databases and e-mails me:
#!/bin/bash
set -o pipefail
_db_user=${POSTGRES_USER}
_db_host=${POSTGRES_HOST}
_root_backup_path=${NFS_MOUNT}/pg_backups
_failed_backups=()
PGBACKUP=""
_db2backup=$(psql -w -t -h ${_db_host} -U ${_db_user} -c "SELECT datname FROM pg_database where datname not in ('template0', 'template1', 'postgres')")
now_cet() {
unset _current_cet
date +%Y-%m-%d_%Hh%Mm%Ss_%Z
}
emailDate() {
date "+%H:%M - %A, %d/%m/%Y %Z"
}
_backup_path="${_root_backup_path}/$(now_cet)"
sendEmailOk() {
echo "Backups for $(emailDate) finished successfully.
The following dababases where backed up:
$(for db in ${_db2backup}; do
echo " - $db: ${_backup_path}/${db}.sql"
done)" | mail -s "PostgreSQL: Backups $(emailDate) OK" ${ALERTS_EMAIL}
}
sendEmailError() {
echo "Something went wrong with while backing up the following databases: $(for db in ${_failed_backups}; do
echo " - $db"
done)" | mail -s "PostgreSQL: ERROR -> Backups $(emailDate) FAILED" ${ALERTS_EMAIL}
}
mkdir $_backup_path
echo " ========================================================"
echo " "$(now_cet)" - Starting PG db backups"
echo " ========================================================" && echo ""
for db in ${_db2backup}; do
_dump_name="${_backup_path}/${db}.sql"
echo " Backing up ${db}: ${_dump_name}"
pg_dump -U ${_db_user} -w -F p --inserts -h ${_db_host} ${db} >${_dump_name}
rc=$?
if [[ $rc != 0 ]]; then
echo ' ERROR'
export PGBACKUP=ERROR
export _failed_backups+=("$db")
else
echo ' OK'
fi
printf "\n"
done
if [[ $PGBACKUP == "ERROR" ]]; then
echo "" && echo " >>> ERROR: Something went wrong during the backup process"
sendEmailError
else
echo " Cleaning up backup directory ${_backup_path}."
for file in $(find ${_root_backup_path}/ -mmin +2160 -name '*.sql'); do
echo " Deleting $file ."
#find ${_root_backup_path}/ -type d -mtime +2 -execdir rmdir -- '{}' \;
done
echo "" && echo " >>> INFO: Database backups successfully completed"
sendEmailOk
fi
printf "\n\n"
Expected e-mail:
Backups for 00:00 - Thursday, 09/01/2019 CET finished successfully.
The following dababases where backed up:
- db1: /somefs/pg_backups/2019-01-09_00h00m01s_CET/db1.sql
- db2: /somefs/pg_backups/2019-01-09_00h00m01s_CET/db2.sql
- db3: /somefs/pg_backups/2019-01-09_00h00m01s_CET/db3.sql
[...]
- db50: /somefs/pg_backups/2019-01-09_00h00m01s_CET/db50.sql