Записи
Ничего не найдено

Бэкап 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