mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-02-03 10:53:48 +00:00
Merge playerbot backup support from modules branch
- Add automatic detection of acore_playerbots database in all backup scripts - Improve restore script with better error handling - Add logging of databases being backed up - Include test-backup-detection.sh script
This commit is contained in:
@@ -10,9 +10,18 @@ BACKUP_DIR="/backups"
|
|||||||
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-3}
|
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-3}
|
||||||
DATE_FORMAT="%Y%m%d_%H%M%S"
|
DATE_FORMAT="%Y%m%d_%H%M%S"
|
||||||
|
|
||||||
# Database names from environment variables
|
# Database names from environment variables - core databases
|
||||||
DATABASES=("${DB_AUTH_NAME:-acore_auth}" "${DB_WORLD_NAME:-acore_world}" "${DB_CHARACTERS_NAME:-acore_characters}")
|
DATABASES=("${DB_AUTH_NAME:-acore_auth}" "${DB_WORLD_NAME:-acore_world}" "${DB_CHARACTERS_NAME:-acore_characters}")
|
||||||
|
|
||||||
|
# Check if acore_playerbots database exists and add it to backup list
|
||||||
|
echo "Checking for optional acore_playerbots database..."
|
||||||
|
if mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "USE acore_playerbots;" 2>/dev/null; then
|
||||||
|
DATABASES+=("acore_playerbots")
|
||||||
|
echo "✅ acore_playerbots database found - will be included in backup"
|
||||||
|
else
|
||||||
|
echo "ℹ️ acore_playerbots database not found - skipping (this is normal for some installations)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Create daily backup directory
|
# Create daily backup directory
|
||||||
DAILY_DIR="$BACKUP_DIR/daily"
|
DAILY_DIR="$BACKUP_DIR/daily"
|
||||||
mkdir -p $DAILY_DIR
|
mkdir -p $DAILY_DIR
|
||||||
@@ -23,6 +32,7 @@ BACKUP_SUBDIR="$DAILY_DIR/$TIMESTAMP"
|
|||||||
mkdir -p $BACKUP_SUBDIR
|
mkdir -p $BACKUP_SUBDIR
|
||||||
|
|
||||||
echo "[$TIMESTAMP] Starting AzerothCore daily backup..."
|
echo "[$TIMESTAMP] Starting AzerothCore daily backup..."
|
||||||
|
echo "[$TIMESTAMP] Databases to backup: ${DATABASES[@]}"
|
||||||
|
|
||||||
# Backup each database with additional options for daily backups
|
# Backup each database with additional options for daily backups
|
||||||
for db in "${DATABASES[@]}"; do
|
for db in "${DATABASES[@]}"; do
|
||||||
|
|||||||
@@ -10,9 +10,18 @@ BACKUP_DIR="/backups"
|
|||||||
RETENTION_HOURS=${BACKUP_RETENTION_HOURS:-6}
|
RETENTION_HOURS=${BACKUP_RETENTION_HOURS:-6}
|
||||||
DATE_FORMAT="%Y%m%d_%H%M%S"
|
DATE_FORMAT="%Y%m%d_%H%M%S"
|
||||||
|
|
||||||
# Database names from environment variables
|
# Database names from environment variables - core databases
|
||||||
DATABASES=("${DB_AUTH_NAME:-acore_auth}" "${DB_WORLD_NAME:-acore_world}" "${DB_CHARACTERS_NAME:-acore_characters}")
|
DATABASES=("${DB_AUTH_NAME:-acore_auth}" "${DB_WORLD_NAME:-acore_world}" "${DB_CHARACTERS_NAME:-acore_characters}")
|
||||||
|
|
||||||
|
# Check if acore_playerbots database exists and add it to backup list
|
||||||
|
echo "Checking for optional acore_playerbots database..."
|
||||||
|
if mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "USE acore_playerbots;" 2>/dev/null; then
|
||||||
|
DATABASES+=("acore_playerbots")
|
||||||
|
echo "✅ acore_playerbots database found - will be included in backup"
|
||||||
|
else
|
||||||
|
echo "ℹ️ acore_playerbots database not found - skipping (this is normal for some installations)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Create hourly backup directory
|
# Create hourly backup directory
|
||||||
HOURLY_DIR="$BACKUP_DIR/hourly"
|
HOURLY_DIR="$BACKUP_DIR/hourly"
|
||||||
mkdir -p $HOURLY_DIR
|
mkdir -p $HOURLY_DIR
|
||||||
@@ -23,6 +32,7 @@ BACKUP_SUBDIR="$HOURLY_DIR/$TIMESTAMP"
|
|||||||
mkdir -p $BACKUP_SUBDIR
|
mkdir -p $BACKUP_SUBDIR
|
||||||
|
|
||||||
echo "[$TIMESTAMP] Starting AzerothCore hourly backup..."
|
echo "[$TIMESTAMP] Starting AzerothCore hourly backup..."
|
||||||
|
echo "[$TIMESTAMP] Databases to backup: ${DATABASES[@]}"
|
||||||
|
|
||||||
# Backup each database
|
# Backup each database
|
||||||
for db in "${DATABASES[@]}"; do
|
for db in "${DATABASES[@]}"; do
|
||||||
|
|||||||
@@ -10,9 +10,18 @@ BACKUP_DIR="/backups"
|
|||||||
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
|
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
|
||||||
DATE_FORMAT="%Y%m%d_%H%M%S"
|
DATE_FORMAT="%Y%m%d_%H%M%S"
|
||||||
|
|
||||||
# Database names
|
# Database names - core databases
|
||||||
DATABASES=("acore_auth" "acore_world" "acore_characters")
|
DATABASES=("acore_auth" "acore_world" "acore_characters")
|
||||||
|
|
||||||
|
# Check if acore_playerbots database exists and add it to backup list
|
||||||
|
echo "Checking for optional acore_playerbots database..."
|
||||||
|
if mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "USE acore_playerbots;" 2>/dev/null; then
|
||||||
|
DATABASES+=("acore_playerbots")
|
||||||
|
echo "✅ acore_playerbots database found - will be included in backup"
|
||||||
|
else
|
||||||
|
echo "ℹ️ acore_playerbots database not found - skipping (this is normal for some installations)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Create backup directory
|
# Create backup directory
|
||||||
mkdir -p $BACKUP_DIR
|
mkdir -p $BACKUP_DIR
|
||||||
|
|
||||||
@@ -22,6 +31,7 @@ BACKUP_SUBDIR="$BACKUP_DIR/$TIMESTAMP"
|
|||||||
mkdir -p $BACKUP_SUBDIR
|
mkdir -p $BACKUP_SUBDIR
|
||||||
|
|
||||||
echo "[$TIMESTAMP] Starting AzerothCore database backup..."
|
echo "[$TIMESTAMP] Starting AzerothCore database backup..."
|
||||||
|
echo "[$TIMESTAMP] Databases to backup: ${DATABASES[@]}"
|
||||||
|
|
||||||
# Backup each database
|
# Backup each database
|
||||||
for db in "${DATABASES[@]}"; do
|
for db in "${DATABASES[@]}"; do
|
||||||
|
|||||||
@@ -24,15 +24,31 @@ fi
|
|||||||
|
|
||||||
echo "⚠️ WARNING: This will overwrite existing databases!"
|
echo "⚠️ WARNING: This will overwrite existing databases!"
|
||||||
echo "Restoring from backup: $TIMESTAMP"
|
echo "Restoring from backup: $TIMESTAMP"
|
||||||
|
|
||||||
|
# List databases that will be restored
|
||||||
|
echo "Databases that will be restored:"
|
||||||
|
for backup_file in $BACKUP_SUBDIR/*.sql.gz; do
|
||||||
|
if [ -f "$backup_file" ]; then
|
||||||
|
db_name=$(basename "$backup_file" .sql.gz)
|
||||||
|
echo " - $db_name"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo "Press Ctrl+C within 10 seconds to cancel..."
|
echo "Press Ctrl+C within 10 seconds to cancel..."
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
# Restore databases
|
# Restore databases
|
||||||
for backup_file in $BACKUP_SUBDIR/*.sql.gz; do
|
for backup_file in $BACKUP_SUBDIR/*.sql.gz; do
|
||||||
if [ -f "$backup_file" ]; then
|
if [ -f "$backup_file" ]; then
|
||||||
echo "Restoring $backup_file..."
|
db_name=$(basename "$backup_file" .sql.gz)
|
||||||
zcat "$backup_file" | mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD
|
echo "Restoring database: $db_name"
|
||||||
echo "✅ Restored $(basename $backup_file)"
|
|
||||||
|
# Restore with error handling for optional databases
|
||||||
|
if zcat "$backup_file" | mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD; then
|
||||||
|
echo "✅ Successfully restored $db_name"
|
||||||
|
else
|
||||||
|
echo "⚠️ Warning: Failed to restore $db_name (this may be normal for optional databases)"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
47
scripts/test-backup-detection.sh
Executable file
47
scripts/test-backup-detection.sh
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Test script to verify acore_playerbots database detection
|
||||||
|
# This script simulates the database detection logic without running an actual backup
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configuration from environment variables
|
||||||
|
MYSQL_HOST=${MYSQL_HOST:-ac-mysql}
|
||||||
|
MYSQL_PORT=${MYSQL_PORT:-3306}
|
||||||
|
MYSQL_USER=${MYSQL_USER:-root}
|
||||||
|
MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
|
||||||
|
|
||||||
|
echo "=== Testing AzerothCore Database Detection ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Core databases
|
||||||
|
DATABASES=("acore_auth" "acore_world" "acore_characters")
|
||||||
|
echo "Core databases: ${DATABASES[@]}"
|
||||||
|
|
||||||
|
# Test if acore_playerbots database exists
|
||||||
|
echo ""
|
||||||
|
echo "Testing for acore_playerbots database..."
|
||||||
|
|
||||||
|
if mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "USE acore_playerbots;" 2>/dev/null; then
|
||||||
|
DATABASES+=("acore_playerbots")
|
||||||
|
echo "✅ acore_playerbots database found - would be included in backup"
|
||||||
|
else
|
||||||
|
echo "ℹ️ acore_playerbots database not found - would be skipped (this is normal for some installations)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Final database list that would be backed up: ${DATABASES[@]}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Test connection to each database that would be backed up
|
||||||
|
echo "Testing connection to each database:"
|
||||||
|
for db in "${DATABASES[@]}"; do
|
||||||
|
if mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "USE $db; SELECT 'OK' as status;" 2>/dev/null | grep -q OK; then
|
||||||
|
echo "✅ $db: Connection successful"
|
||||||
|
else
|
||||||
|
echo "❌ $db: Connection failed"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Database Detection Test Complete ==="
|
||||||
Reference in New Issue
Block a user