#!/bin/bash # TomTomGames automated backup — runs daily at 2 AM via cron # Cron entry: 0 2 * * * /usr/local/bin/ttg-backup.sh >> /home/tomtomgames.com/backups/backup.log 2>&1 BACKUP_DIR="/home/tomtomgames.com/backups" SITE_DIR="/home/tomtomgames.com/public_html" DB_NAME="tomt_ttg_db" DB_USER="tomt_ttg_user" DB_PASS='q#q+mrOcozsa7I6J' DATE=$(date +%Y-%m-%d_%H-%M-%S) SQL_FILE="/tmp/ttg_db_${DATE}.sql" ZIP_FILE="${BACKUP_DIR}/ttg_backup_${DATE}.zip" mkdir -p "$BACKUP_DIR" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting backup..." # Export database /usr/bin/mysqldump -u "$DB_USER" "-p${DB_PASS}" "$DB_NAME" > "$SQL_FILE" 2>&1 if [ $? -ne 0 ] || [ ! -s "$SQL_FILE" ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Database export failed" rm -f "$SQL_FILE" exit 1 fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] Database exported ($(du -sh "$SQL_FILE" | cut -f1))" # Create zip archive (site files + db dump) /usr/bin/zip -r "$ZIP_FILE" "$SITE_DIR" "$SQL_FILE" -x "*/backups/*" > /dev/null 2>&1 RC=$? rm -f "$SQL_FILE" if [ $RC -ne 0 ] || [ ! -f "$ZIP_FILE" ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Archive creation failed" rm -f "$ZIP_FILE" exit 1 fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] Archive created: $(basename "$ZIP_FILE") ($(du -sh "$ZIP_FILE" | cut -f1))" # Keep only the 7 most recent backups ls -t "${BACKUP_DIR}"/ttg_backup_*.zip 2>/dev/null | tail -n +8 | while read old; do rm -f "$old" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Pruned old backup: $(basename "$old")" done echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup complete."