45 lines
1.2 KiB
Bash
45 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Postgres configuration (replace with your details)
|
|
PGUSER="your_username"
|
|
PGHOST="your_hostname"
|
|
PGPORT="5432"
|
|
export PGPASSWORD="your_password"
|
|
BACKUPDIR="/backup"
|
|
EXCLUDE_DBS="template0 template1 postgres" # Exclude these databases
|
|
|
|
# Get date in YYYY-MM-DD format
|
|
CURRENTDATE=$(date +%Y-%m-%d)
|
|
|
|
# Function to backup a single database
|
|
backup_database() {
|
|
local db_name="$1"
|
|
local backup_file="$BACKUPDIR/$CURRENTDATE-$db_name.sql.gz"
|
|
|
|
# Skip excluded databases
|
|
if [[ "$EXCLUDE_DBS" =~ " $db_name " ]]; then
|
|
echo "Skipping excluded database: $db_name"
|
|
return
|
|
fi
|
|
|
|
# Dump the database
|
|
pg_dump -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$db_name" | gzip > "$backup_file"
|
|
echo "Backup completed: $backup_file"
|
|
}
|
|
|
|
# Ensure backup directory exists
|
|
mkdir -p "$BACKUPDIR"
|
|
|
|
# Get list of databases (excluding template and postgres)
|
|
databases=$(psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;")
|
|
|
|
# Loop through databases and backup each one
|
|
for db_name in $databases; do
|
|
backup_database "$db_name"
|
|
done
|
|
|
|
# Delete backups older than 60 days
|
|
find "$BACKUPDIR" -type f -name "*.sql.gz" -mtime +30 -delete
|
|
|
|
echo "Deleted old backups from $BACKUPDIR"
|