#!/bin/bash # Конфигурация PG_HOST="10.7.0.10" PG_USER="squiz" # Пользователь с правами бэкапа PG_PASS="Redalert2" # Пароль (если есть) BACKUP_DIR="postgres_backup" ARCHIVE_NAME="$BACKUP_DIR.tar.gz" S3_TARGET="tw/3c580be9-5ad7b4ab-08c3-4eeb-90b9-767746b1d4a7/postgres-staging" TELEGRAM_BOT_TOKEN="6414077478:AAFk03HezovLT2kO_i9OYswH8Weirsgp9GU" TELEGRAM_CHAT_ID=""-1002045305199 # Функции send_telegram() { local message="$1" curl -s -X POST \ "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -d "chat_id=${TELEGRAM_CHAT_ID}" \ -d "text=${message}" \ -d "parse_mode=Markdown" >/dev/null } log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } # Создаем директорию для бэкапа mkdir -p "$BACKUP_DIR" # Получаем список всех баз (исключая шаблонные) DATABASES=$(PGPASSWORD="$PG_PASS" psql -h "$PG_HOST" -U "$PG_USER" -t -c "SELECT datname FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'postgres')") if [ -z "$DATABASES" ]; then error_msg="❌ Не удалось получить список баз данных PostgreSQL" log "$error_msg" send_telegram "$error_msg" exit 1 fi # Делаем бэкап каждой базы for DB in $DATABASES; do log "Бэкап базы $DB..." PGPASSWORD="$PG_PASS" pg_dump -h "$PG_HOST" -U "$PG_USER" -F d -f "$BACKUP_DIR/$DB" "$DB" if [ $? -ne 0 ]; then error_msg="❌ Ошибка при бэкапе базы $DB" log "$error_msg" send_telegram "$error_msg" exit 1 fi done # Архивируем log "Создание архива $ARCHIVE_NAME..." tar -czvf "$ARCHIVE_NAME" "$BACKUP_DIR" if [ $? -ne 0 ]; then error_msg="❌ Ошибка при создании архива" log "$error_msg" send_telegram "$error_msg" exit 1 fi # Загружаем в S3 log "Загрузка в S3..." mc cp "$ARCHIVE_NAME" "$S3_TARGET/$ARCHIVE_NAME" if [ $? -ne 0 ]; then error_msg="❌ Ошибка при загрузке в S3" log "$error_msg" send_telegram "$error_msg" exit 1 fi # Очистка log "Очистка временных файлов..." rm -rf "$BACKUP_DIR" "$ARCHIVE_NAME" # Уведомление success_msg="✅ Бэкап PostgreSQL произведён\n\nАрхив: $ARCHIVE_NAME\nS3 путь: $S3_TARGET/$ARCHIVE_NAME\nБаз: $(echo "$DATABASES" | wc -w)" log "$success_msg" send_telegram "$success_msg" log "Готово!" exit 0