diff --git a/mongo-backup.sh b/mongo-backup.sh new file mode 100644 index 0000000..a24a0f0 --- /dev/null +++ b/mongo-backup.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Конфигурация +BACKUP_DIR="dump" +ARCHIVE_NAME="mongo-staging-backup.tar.gz" +S3_TARGET="tw/3c580be9-5ad7b4ab-08c3-4eeb-90b9-767746b1d4a7/mongo-staging" +TELEGRAM_BOT_TOKEN="6414077478:AAFk03HezovLT2kO_i9OYswH8Weirsgp9GU" +TELEGRAM_CHAT_ID="-1002045305199" + +# Функция для отправки сообщения в Telegram +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" +} + +# Создаем дамп MongoDB +log "Создание дампа MongoDB..." +mongodump --host=localhost --out="$BACKUP_DIR" + +if [ $? -ne 0 ]; then + error_msg="❌ Ошибка при создании дампа MongoDB" + log "$error_msg" + send_telegram "$error_msg" + exit 1 +fi + +# Архивируем дамп +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="✅ Бэкап MongoDB произведён\n\nАрхив: $ARCHIVE_NAME\nS3 путь: $S3_TARGET/$ARCHIVE_NAME" +log "$success_msg" +send_telegram "$success_msg" + +log "Процесс завершен успешно" +exit 0 diff --git a/postgres-backup.sh b/postgres-backup.sh new file mode 100644 index 0000000..22ea17d --- /dev/null +++ b/postgres-backup.sh @@ -0,0 +1,85 @@ +#!/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