debion-web-server/assets/pgsqlbackup.sh
2021-04-29 15:35:41 +02:00

60 lines
2.1 KiB
Bash

#!/bin/bash
# Simple script to backup postgresql databases
# Parent backup directory
backup_parent_dir="/var/backups/postgresql"
# PostgreSQL settings
pg_host="HOST"
pg_port="PORT"
pg_user="USER"
pg_password="PASSWD"
# Check MySQL password
# echo exit | mysql --user=${mysql_user} --password=${mysql_password} -B 2>/dev/null
# if [ "$?" -gt 0 ]; then
# echo "MySQL ${mysql_user} password incorrect"
# exit 1
# else
# echo "MySQL ${mysql_user} password correct."
# fi
# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 644 "${backup_dir}"
# Get postgresql databases
pgsql_databases=`psql "host=$pg_host port=$pg_port user=$pg_user password=$pg_password" -At -c "select datname from pg_database where not datistemplate and datallowconn;"`
# Backup and compress each database
for database in $pgsql_databases
do
echo "Creating backup of \"${database}\" database"
# mysqldump ${additional_mysqldump_params} --user=${mysql_user} --password=${mysql_password} ${database} | gzip > "${backup_dir}/${database}.sql.gz"
# chmod 644 "${backup_dir}/${database}.sql.gz"
set -o pipefail
# if ! pg_dump -Fp -h "$pg_host" -U "$pg_user" "$database" | gzip > $backup_dir"/$database".sql.gz.in_progress; then
# if ! pg_dump -Fp "host=$pg_host port=$pg_port user=$pg_user password=$pg_password" "$database" | gzip > $backup_dir"/$database".sql.gz.in_progress; then
if ! pg_dump -Fp --dbname="postgresql://$pg_user:$pg_password@$pg_host:$pg_port/$database" | gzip > $backup_dir"/$database".sql.gz.in_progress; then
echo "[!!ERROR!!] Failed to produce plain backup database $database" 1>&2
else
mv $backup_dir"/$database".sql.gz.in_progress $backup_dir"/$database".sql.gz
fi
set +o pipefail
done
# compress the folder
# tar -zcvf "${backup_dir}.tar.gz" "${backup_dir}"
# rm -rf "${backup_dir}"
# Rotate backups
# Delete files older than 30 days
find $backup_parent_dir/ -type f -mtime +60 -delete;
# Delete empty directories
find $backup_parent_dir/ -type d -empty -delete;