57 lines
1.6 KiB
Bash
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."
|