#!/bin/bash # Скрипт для автоматического резервного копирования MongoDB # Запускается раз в неделю через cron # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Конфигурация BACKUP_DIR="/mnt/nakama-backups" MONGODB_URI="mongodb://103.80.87.247:27017/nakama" DB_NAME="nakama" DATE=$(date +"%Y-%m-%d_%H-%M-%S") BACKUP_NAME="nakama_backup_${DATE}" RETENTION_DAYS=30 echo -e "${GREEN}=== Начало резервного копирования ===${NC}" echo "Дата: $(date)" echo "База данных: ${DB_NAME}" echo "Директория бекапов: ${BACKUP_DIR}" # Создать директорию для бекапов, если она не существует mkdir -p "${BACKUP_DIR}" # Выполнить mongodump echo -e "${YELLOW}Создание резервной копии...${NC}" if mongodump --uri="${MONGODB_URI}" --db="${DB_NAME}" --out="${BACKUP_DIR}/${BACKUP_NAME}" --gzip; then echo -e "${GREEN}✓ Резервная копия успешно создана${NC}" # Создать архив echo -e "${YELLOW}Создание архива...${NC}" cd "${BACKUP_DIR}" || exit 1 if tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"; then echo -e "${GREEN}✓ Архив создан: ${BACKUP_NAME}.tar.gz${NC}" # Удалить временную директорию rm -rf "${BACKUP_NAME}" # Получить размер архива BACKUP_SIZE=$(du -h "${BACKUP_NAME}.tar.gz" | cut -f1) echo -e "${GREEN}Размер архива: ${BACKUP_SIZE}${NC}" else echo -e "${RED}✗ Ошибка создания архива${NC}" exit 1 fi else echo -e "${RED}✗ Ошибка создания резервной копии${NC}" exit 1 fi # Удалить старые бекапы (старше RETENTION_DAYS дней) echo -e "${YELLOW}Удаление старых бекапов (старше ${RETENTION_DAYS} дней)...${NC}" find "${BACKUP_DIR}" -name "nakama_backup_*.tar.gz" -type f -mtime +${RETENTION_DAYS} -delete REMAINING_BACKUPS=$(find "${BACKUP_DIR}" -name "nakama_backup_*.tar.gz" -type f | wc -l) echo -e "${GREEN}Оставшихся бекапов: ${REMAINING_BACKUPS}${NC}" # Вывести список последних бекапов echo -e "${YELLOW}Последние 5 бекапов:${NC}" ls -lht "${BACKUP_DIR}"/nakama_backup_*.tar.gz | head -5 echo -e "${GREEN}=== Резервное копирование завершено ===${NC}" echo "" # Отправить уведомление (опционально) # Раскомментируйте, если хотите получать уведомления # curl -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ # -d "chat_id=${YOUR_CHAT_ID}" \ # -d "text=✅ Резервная копия Nakama успешно создана: ${BACKUP_NAME}.tar.gz (${BACKUP_SIZE})"