nakama/backup-cron.sh

73 lines
3.0 KiB
Bash
Executable File

#!/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})"