Files
tilbudgivern/scripts/setup-alex-backups.sh
alexpolo1 9d1b1917a7 Add comprehensive database backup setup and scripts
- Created DATABASE_BACKUP_SETUP.md for detailed backup instructions
- Implemented backup-databases.sh for automated database backups
- Added logrotate configuration for managing backup logs
- Developed setup scripts for user-specific backup configurations
- Included error handling and logging in backup processes
- Established cron job setup for automated backups
- Provided examples and troubleshooting tips in documentation
2025-11-16 21:12:29 +00:00

188 lines
5.2 KiB
Bash
Executable File

#!/bin/bash
###############################################################################
# Quick Setup for Database Backups (Alex User)
# This script sets up the backup crontab for the alex user
###############################################################################
set -euo pipefail
SCRIPT_DIR="/mnt/HC_Volume_103713257/tilbudgivern/scripts"
BACKUP_SCRIPT="$SCRIPT_DIR/backup-databases.sh"
PROJECT_DIR="/mnt/HC_Volume_103713257/tilbudgivern"
ENV_FILE="$PROJECT_DIR/backend/.env"
echo "=========================================="
echo "Database Backup Setup for Alex User"
echo "=========================================="
echo ""
# Check if running as alex
CURRENT_USER=$(whoami)
if [ "$CURRENT_USER" != "alex" ]; then
echo "⚠️ Warning: You are running as '$CURRENT_USER', not 'alex'"
echo " This setup is designed for the alex user"
echo ""
read -p "Continue anyway? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
echo "Current user: $CURRENT_USER"
echo ""
# Check if backup script exists
if [ ! -f "$BACKUP_SCRIPT" ]; then
echo "❌ Error: Backup script not found at $BACKUP_SCRIPT"
exit 1
fi
# Make backup script executable
echo "📝 Setting execute permissions on backup script..."
chmod +x "$BACKUP_SCRIPT"
echo "✅ Done"
echo ""
# Create directories with proper permissions
echo "📁 Creating backup directories..."
mkdir -p "$PROJECT_DIR/backups"
mkdir -p "$PROJECT_DIR/logs/backups"
chmod 755 "$PROJECT_DIR/backups"
chmod 755 "$PROJECT_DIR/logs/backups"
echo "✅ Done"
echo ""
# Check if .env exists and has backup vars
if [ ! -f "$ENV_FILE" ]; then
echo "❌ Error: .env file not found at $ENV_FILE"
exit 1
fi
if ! grep -q "DB_BACKUP_USER" "$ENV_FILE"; then
echo "⚠️ Warning: DB_BACKUP_USER not found in .env"
echo " Please add these variables to .env:"
echo " DB_BACKUP_USER=tilbudgivern_service"
echo " DB_BACKUP_PASSWORD=REDACTED_PASSWORD"
echo " DB_BACKUP_HOST=127.0.0.1"
exit 1
fi
echo "✅ Database credentials found in .env"
echo ""
# Test database connection
echo "🔌 Testing database connection..."
if source "$ENV_FILE" && mysql -u "$DB_BACKUP_USER" -p"$DB_BACKUP_PASSWORD" -h "$DB_BACKUP_HOST" -e "SHOW DATABASES;" &>/dev/null; then
echo "✅ Database connection successful"
else
echo "⚠️ Warning: Could not connect to database"
echo " Database credentials may be incorrect"
read -p "Continue anyway? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
echo ""
# Ask user for cron schedule
echo "Select backup schedule:"
echo "1) Daily at 02:00 (recommended)"
echo "2) Daily at 00:00 (midnight)"
echo "3) Daily at 03:00"
echo "4) Every 6 hours"
echo "5) Custom cron expression"
read -p "Choose (1-5): " choice
case $choice in
1)
CRON_EXPR="0 2 * * *"
DESCRIPTION="Daily at 02:00"
;;
2)
CRON_EXPR="0 0 * * *"
DESCRIPTION="Daily at 00:00"
;;
3)
CRON_EXPR="0 3 * * *"
DESCRIPTION="Daily at 03:00"
;;
4)
CRON_EXPR="0 */6 * * *"
DESCRIPTION="Every 6 hours"
;;
5)
read -p "Enter cron expression: " CRON_EXPR
DESCRIPTION="Custom: $CRON_EXPR"
;;
*)
echo "❌ Invalid choice"
exit 1
;;
esac
echo ""
echo "⚙️ Setting up crontab..."
echo "Schedule: $DESCRIPTION"
echo "Command: $BACKUP_SCRIPT"
echo ""
# Check if cron job already exists
if crontab -l 2>/dev/null | grep -q "backup-databases.sh"; then
echo "⚠️ Cron job already exists. Updating..."
# Remove old job and add new one
(crontab -l 2>/dev/null | grep -v "backup-databases.sh"; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR $BACKUP_SCRIPT") | crontab -
else
# Add new cron job
(crontab -l 2>/dev/null || echo ""; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR $BACKUP_SCRIPT") | crontab -
fi
echo "✅ Crontab updated successfully"
echo ""
# Verify crontab
echo "Current crontab entries for backups:"
echo "---"
crontab -l 2>/dev/null | grep -i backup || echo "No backup entries found"
echo "---"
echo ""
# Offer to test manually
echo "Run first backup test?"
read -p "Test backup now? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo ""
echo "Running backup test..."
echo "---"
if source "$ENV_FILE" && $BACKUP_SCRIPT; then
echo "---"
echo "✅ Backup test successful!"
else
echo "---"
echo "❌ Backup test failed. Check the error above."
exit 1
fi
fi
echo ""
echo "=========================================="
echo "Setup Complete!"
echo "=========================================="
echo ""
echo "Backup information:"
echo " Backup directory: $PROJECT_DIR/backups"
echo " Log file: $PROJECT_DIR/logs/backups/backup.log"
echo " Retention: 7 days (auto-rotation)"
echo " Schedule: $DESCRIPTION"
echo ""
echo "Useful commands:"
echo " View backups: ls -lh $PROJECT_DIR/backups/"
echo " View logs: tail -f $PROJECT_DIR/logs/backups/backup.log"
echo " Check crontab: crontab -l"
echo " Manual backup: $BACKUP_SCRIPT"
echo ""
echo "Next time you login, backups will run automatically!"