appointment_system/docker/scripts/backup-database.sh
2025-12-11 22:50:18 +08:00

57 lines
1.6 KiB
Bash

#!/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."