#!/bin/bash # Database Backup Script for Overseas Appointment System # This script creates daily backups of the MySQL database set -e # Configuration BACKUP_DIR="/backups/mysql" RETENTION_DAYS=7 DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="overseas_appointment_${DATE}.sql.gz" # Database credentials (from environment or defaults) DB_HOST="${DB_HOST:-mysql}" DB_PORT="${DB_PORT:-3306}" DB_NAME="${DB_NAME:-overseas_appointment}" DB_USER="${DB_USER:-app_user}" DB_PASSWORD="${DB_PASSWORD:-}" # Create backup directory if it doesn't exist mkdir -p "${BACKUP_DIR}" echo "[$(date)] Starting database backup..." # Create backup using mysqldump mysqldump \ --host="${DB_HOST}" \ --port="${DB_PORT}" \ --user="${DB_USER}" \ --password="${DB_PASSWORD}" \ --single-transaction \ --routines \ --triggers \ --events \ --add-drop-table \ --complete-insert \ "${DB_NAME}" | gzip > "${BACKUP_DIR}/${BACKUP_FILE}" # Check if backup was successful if [ $? -eq 0 ]; then echo "[$(date)] Backup completed successfully: ${BACKUP_FILE}" echo "[$(date)] Backup size: $(du -h ${BACKUP_DIR}/${BACKUP_FILE} | cut -f1)" else echo "[$(date)] ERROR: Backup failed!" exit 1 fi # Remove old backups (older than RETENTION_DAYS) echo "[$(date)] Cleaning up old backups (older than ${RETENTION_DAYS} days)..." find "${BACKUP_DIR}" -name "overseas_appointment_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete # List remaining backups echo "[$(date)] Current backups:" ls -lh "${BACKUP_DIR}"/*.sql.gz 2>/dev/null || echo "No backups found" echo "[$(date)] Backup process completed."