Добавить postgresql-backup.sh
This commit is contained in:
commit
9107600449
92
postgresql-backup.sh
Normal file
92
postgresql-backup.sh
Normal file
@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e # Завершить при любой ошибке
|
||||
|
||||
# === Настройки ===
|
||||
BACKUP_DIR="/root/backups/postgresql"
|
||||
DATE=$(date +%Y%m%d-%H%M)
|
||||
LOG_FILE="$BACKUP_DIR/backup.log"
|
||||
|
||||
# Параметры подключения к PostgreSQL
|
||||
PG_HOST="localhost" # или IP, например "127.0.0.1"
|
||||
PG_PORT="5432"
|
||||
PG_USER="postgres" # пользователь с правами на pg_dump
|
||||
PG_DB="your_database_name" # имя вашей БД (или "all" для всех)
|
||||
# PG_PASSWORD="secret" # ← раскомментируйте, если не используете .pgpass
|
||||
|
||||
# Опционально: путь к pg_dump (если не в PATH)
|
||||
# PG_DUMP="/usr/bin/pg_dump"
|
||||
|
||||
# Создаём папку
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Функция логирования
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "Начинаем резервное копирование PostgreSQL..."
|
||||
|
||||
# === Установка переменных окружения (если указан пароль) ===
|
||||
if [[ -n "${PG_PASSWORD:-}" ]]; then
|
||||
export PGPASSWORD="$PG_PASSWORD"
|
||||
fi
|
||||
|
||||
# === Имя файла бэкапа ===
|
||||
if [[ "$PG_DB" == "all" ]]; then
|
||||
BACKUP_FILE="$BACKUP_DIR/postgres-all-$DATE.sql.gz"
|
||||
else
|
||||
BACKUP_FILE="$BACKUP_DIR/postgres-${PG_DB}-$DATE.sql.gz"
|
||||
fi
|
||||
|
||||
# === Создание дампа ===
|
||||
log "Создаём дамп базы данных: $PG_DB..."
|
||||
|
||||
if [[ "$PG_DB" == "all" ]]; then
|
||||
# Дамп всех баз (только структура + данные, без ролей и т.д.)
|
||||
pg_dumpall \
|
||||
--host="$PG_HOST" \
|
||||
--port="$PG_PORT" \
|
||||
--username="$PG_USER" \
|
||||
--clean \
|
||||
--if-exists \
|
||||
| gzip > "$BACKUP_FILE"
|
||||
else
|
||||
# Дамп одной базы
|
||||
pg_dump \
|
||||
--host="$PG_HOST" \
|
||||
--port="$PG_PORT" \
|
||||
--username="$PG_USER" \
|
||||
--dbname="$PG_DB" \
|
||||
--clean \
|
||||
--if-exists \
|
||||
--no-owner \
|
||||
--no-privileges \
|
||||
| gzip > "$BACKUP_FILE"
|
||||
fi
|
||||
|
||||
# Проверка, что файл создан и не пустой
|
||||
if [[ ! -s "$BACKUP_FILE" ]]; then
|
||||
log "Ошибка: дамп пустой или не создан!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Дамп успешно сохранён: $BACKUP_FILE"
|
||||
|
||||
# === Удаление старых бэкапов (>7 дней) по дате в имени ===
|
||||
log "Удаляем бэкапы старше 7 дней..."
|
||||
cutoff=$(date -d '7 days ago' +%Y%m%d)
|
||||
|
||||
for file in "$BACKUP_DIR"/postgres-*.sql.gz; do
|
||||
[[ -e "$file" ]] || continue
|
||||
basename_file=$(basename "$file")
|
||||
if [[ $basename_file =~ postgres-.*-([0-9]{8})-[0-9]{4}\.sql\.gz$ ]]; then
|
||||
file_date="${BASH_REMATCH[1]}"
|
||||
if [[ $file_date -lt $cutoff ]]; then
|
||||
log "Удаляем старый дамп: $file"
|
||||
rm -f "$file"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
log "Резервное копирование PostgreSQL завершено."
|
||||
Loading…
Reference in New Issue
Block a user