- 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
188 lines
5.2 KiB
Bash
Executable File
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!"
|