73 lines
3.0 KiB
Bash
73 lines
3.0 KiB
Bash
|
|
#!/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})"
|
||
|
|
|