Бэкап postgres
#!/bin/bash
# Создаем директорию для бэкапов
BACKUP_DIR="/var/backups/postgres"
rm -rf "$BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR"
chown postgres "$BACKUP_DIR"
# Получаем список баз данных (исключая системные)
databases=$(sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname NOT IN ('postgres');" 2>/dev/null)
# Бэкапим каждую базу
for db in $databases; do
echo "Backing up database: $db"
sudo -u postgres pg_dump "$db" -f "${db}.sql"
done
echo "Backup completed! Files saved in $BACKUP_DIR"
Вариант с докером и шифрованием
sudo apt install pbzip2
postgres-backup.sh
#!/bin/bash
PGPASS=pgpass
PGUSER=postgres
ARCHIVE_PASS=archivepass
# Создаем директорию для бэкапов
BACKUP_DIR="/srv/backup/postgres"
rm -rf "$BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR"
DATE=$(date +%Y-%m-%d)
SQL="SELECT datname FROM pg_database WHERE datistemplate = false AND datname <> 'postgres';"
databases=$(docker exec -e PGPASSWORD="$PGPASS" postgres psql -d postgres -U "$PGUSER" -t -c "$SQL" 2>/dev/null)
# Бэкапим каждую базу
for db in $databases; do
docker exec -e PGPASSWORD="$PGPASS" postgres pg_dump -U $PGUSER "$db" | pbzip2 -c | openssl enc -e -aes-256-cbc -pbkdf2 -k ${ARCHIVE_PASS} -out ${db}-${DATE}.sql.bz2.enc
done
Распаковка
openssl enc -d -aes-256-cbc -pbkdf2 -in archive.sql.bz2.enc | pbzip2 -d -c > archive.sql
