- 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
142 lines
3.9 KiB
Bash
Executable File
142 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
###############################################################################
|
|
# Quick Setup Script for Database Backups
|
|
# Run this script to automatically set up crontab
|
|
###############################################################################
|
|
|
|
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"
|
|
|
|
echo "=========================================="
|
|
echo "Database Backup Setup Script"
|
|
echo "=========================================="
|
|
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
|
|
echo "📁 Creating backup directories..."
|
|
mkdir -p "$PROJECT_DIR/backups"
|
|
mkdir -p "$PROJECT_DIR/logs/backups"
|
|
echo "✅ Done"
|
|
echo ""
|
|
|
|
# Check if .env exists
|
|
if [ ! -f "$PROJECT_DIR/backend/.env" ]; then
|
|
echo "⚠️ Warning: .env file not found at $PROJECT_DIR/backend/.env"
|
|
echo " Please create it first with DB_USER, DB_PASSWORD, DB_HOST"
|
|
read -p "Continue anyway? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 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: source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT"
|
|
echo ""
|
|
|
|
# Check if cron job already exists
|
|
if sudo crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
|
|
echo "⚠️ Cron job already exists. Updating..."
|
|
# Remove old job
|
|
(sudo crontab -l 2>/dev/null | grep -v "$BACKUP_SCRIPT" | sudo crontab -) || true
|
|
fi
|
|
|
|
# Add new cron job
|
|
(sudo crontab -l 2>/dev/null || echo ""; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT") | sudo crontab -
|
|
|
|
echo "✅ Crontab updated successfully"
|
|
echo ""
|
|
|
|
# Verify crontab
|
|
echo "Current crontab entries for backups:"
|
|
sudo crontab -l 2>/dev/null | grep -i backup || echo "No backup entries found"
|
|
echo ""
|
|
|
|
# Ask about logrotate
|
|
read -p "Install logrotate configuration? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Installing logrotate configuration..."
|
|
sudo cp "$PROJECT_DIR/infra/logrotate-backups.conf" /etc/logrotate.d/tilbudgivern-backups
|
|
sudo chmod 644 /etc/logrotate.d/tilbudgivern-backups
|
|
echo "✅ Logrotate configuration installed"
|
|
else
|
|
echo "Skipping logrotate installation"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Setup Complete!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Update .env with database credentials:"
|
|
echo " DB_USER=root"
|
|
echo " DB_PASSWORD=your_password"
|
|
echo " DB_HOST=localhost"
|
|
echo ""
|
|
echo "2. Test the backup manually:"
|
|
echo " source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT"
|
|
echo ""
|
|
echo "3. View backup logs:"
|
|
echo " tail -f $PROJECT_DIR/logs/backups/backup.log"
|
|
echo ""
|
|
echo "4. View backups:"
|
|
echo " ls -lh $PROJECT_DIR/backups/"
|
|
echo ""
|
|
echo "For more info, see: $PROJECT_DIR/docs/DATABASE_BACKUP_SETUP.md"
|