Files
new_lottery_bot/scripts/backup_db.sh
Andrew K. Choi e1b4465f89
Some checks failed
continuous-integration/drone/pr Build is failing
feat: Add admin management system with super admin controls
- Implemented two-level admin hierarchy (super admin from .env and assigned admins)
- Only super admins (from ADMIN_IDS in .env) can manage admin assignments
- Added admin management menu to settings (visible only for super admins)
- Admins can add/remove other admins through the bot interface
- Protected super admins from deletion
- Added CLI tool for admin management (scripts/manage_admins.py)
- Added database check script (scripts/check_db.py)
- Added deployment scripts for server setup
- Added comprehensive documentation on admin management system
- Added backup and server deployment guides
2026-02-18 13:19:26 +09:00

103 lines
3.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт резервного копирования БД PostgreSQL
# Использование: ./backup_db.sh
# Для автоматизации добавьте в crontab: 0 3 * * * /path/to/backup_db.sh
set -e
# Переменные
BACKUP_DIR="${HOME}/new_lottery_bot/backups"
DB_NAME="${DATABASE_DEFAULT:-lottery_bot}"
DB_USER="${DATABASE_USER:-trevor}"
DB_HOST="${DATABASE_HOST:-localhost}"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="${BACKUP_DIR}/lottery_bot_${TIMESTAMP}.sql.gz"
KEEP_DAYS=7 # Хранить резервные копии 7 дней
# Цвета
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}$1${NC}"
}
log_warn() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}$1${NC}"
}
echo "🔄 Резервное копирование БД PostgreSQL"
echo "========================================"
# Создание директории для резервных копий
if [ ! -d "$BACKUP_DIR" ]; then
log_info "Создание директории для резервных копий..."
mkdir -p "$BACKUP_DIR"
fi
# Получение размера БД перед резервной копией
DB_SIZE=$(psql -h "$DB_HOST" -U "$DB_USER" -t -c "
SELECT pg_size_pretty(pg_database.datsize)
FROM pg_database
WHERE datname = '$DB_NAME';
")
log_info "База данных: $DB_NAME"
log_info "Размер БД: $DB_SIZE"
log_info "Файл резервной копии: $BACKUP_FILE"
# Создание резервной копии
echo ""
echo "⏳ Выполнение резервной копии..."
if pg_dump -h "$DB_HOST" -U "$DB_USER" "$DB_NAME" | gzip > "$BACKUP_FILE" 2>/dev/null; then
BACKUP_SIZE=$(ls -lh "$BACKUP_FILE" | awk '{print $5}')
log_info "Резервная копия создана успешно"
log_info "Размер файла: $BACKUP_SIZE"
else
log_error "Ошибка при создании резервной копии"
exit 1
fi
# Удаление старых резервных копий
echo ""
echo "🧹 Удаление старых резервных копий..."
find "$BACKUP_DIR" -name "lottery_bot_*.sql.gz" -mtime +$KEEP_DAYS -exec rm -f {} \;
log_info "Очистка завершена (хранятся копии за последние $KEEP_DAYS дней)"
# Статистика
echo ""
echo "📊 Статистика резервных копий:"
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" | awk '{print $1}')
COUNT=$(ls -1 "$BACKUP_DIR"/lottery_bot_*.sql.gz 2>/dev/null | wc -l)
log_info "Всего резервных копий: $COUNT"
log_info "Общий размер: $TOTAL_SIZE"
# Информация о последних копиях
echo ""
echo "📋 Последние 5 резервных копий:"
ls -1t "$BACKUP_DIR"/lottery_bot_*.sql.gz 2>/dev/null | head -5 | while read file; do
size=$(ls -lh "$file" | awk '{print $5}')
name=$(basename "$file")
echo "$name ($size)"
done
echo ""
echo "========================================"
log_info "Резервная копия завершена!"
# Дополнительная информация
echo ""
echo "💡 Советы:"
echo " • Важные копии загружайте на облако"
echo " • Тестируйте восстановление из копий"
echo " • Добавьте в crontab для автоматизации:"
echo " 0 3 * * * $PWD/scripts/backup_db.sh"
echo ""