mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-01-13 00:58:34 +00:00
4.9 KiB
4.9 KiB
Enhanced Backup Detection and Restoration System
Overview
This enhanced system provides intelligent backup detection and conditional database import to prevent data loss and streamline AzerothCore startup.
Key Improvements
1. Smart Backup Detection
- Multiple backup formats supported: Legacy single-file, timestamped directories, daily/hourly backups
- Automatic latest backup selection: Prioritizes daily → hourly → legacy backups
- Backup validation: Verifies SQL file integrity before restoration
- Fallback logic: Tries multiple backup sources if one fails
2. Conditional Database Import
- Restoration-aware: Skips import entirely if backup was successfully restored
- Data protection: Prevents overwriting restored data with fresh schema
- Status tracking: Uses marker files to communicate between services
- Verification: Checks database population before and after operations
3. Status Communication System
- Restoration markers:
.restore-completed: Backup successfully restored, skip import.restore-failed: No backup found, proceed with import.import-completed: Fresh database import successful.import-failed: Import process failed
File Structure
scripts/
├── db-init-enhanced.sh # Enhanced database initialization
├── db-import-conditional.sh # Conditional database import
└── (original files remain unchanged)
docker-compose-azerothcore-database.yml # Updated to use enhanced scripts
Startup Flow
Original Flow (Data Loss Risk)
MySQL Start → db-init → restore backup → db-import → OVERWRITE with fresh data ❌
Enhanced Flow (Data Protection)
MySQL Start → db-init-enhanced → detect backups
├── Backup found → restore → mark success → db-import → SKIP ✅
└── No backup → create empty → mark failed → db-import → POPULATE ✅
Backup Detection Priority
- Legacy backup:
/var/lib/mysql-persistent/backup.sql - Daily backups:
/backups/daily/{timestamp}/ - Hourly backups:
/backups/hourly/{timestamp}/ - Legacy timestamped:
/backups/{timestamp}/
Configuration Changes
Updated Docker Compose Service: ac-db-init
- Added backup volume mount:
${HOST_BACKUP_PATH}:/backups - Changed script URL to use
db-init-enhanced.sh
Updated Docker Compose Service: ac-db-import
- Added persistent volume mount:
${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent - Replaced default dbimport entrypoint with conditional script
- Added environment variables for database connection
Status Markers
Located in /var/lib/mysql-persistent/:
.restore-completed
2023-10-12 10:30:15: Backup successfully restored
Effect: db-import service exits immediately without importing
.restore-failed
2023-10-12 10:30:15: No backup restored - fresh databases created
Effect: db-import service proceeds with fresh data population
.import-completed
2023-10-12 10:35:20: Database import completed successfully
Effect: Confirms successful fresh database population
Benefits
- Data Loss Prevention: Never overwrites restored backups
- Faster Startup: Skips unnecessary import when restoring from backup
- Automatic Detection: No manual intervention required
- Backward Compatibility: Works with existing backup formats
- Status Visibility: Clear indicators of what happened during startup
- Validation: Verifies backup integrity and import success
Migration from Original System
Automatic Migration
- Enhanced scripts are backward compatible
- Existing backup structures continue to work
- No data migration required
Deployment
- Update docker-compose file to use enhanced scripts
- Restart database layer:
docker-compose -f docker-compose-azerothcore-database.yml up - Monitor logs for backup detection and restoration status
Troubleshooting
Check Status Markers
# Check what happened during last startup
ls -la ./storage/azerothcore/mysql-data/.restore-* .import-*
# View status details
cat ./storage/azerothcore/mysql-data/.restore-completed
cat ./storage/azerothcore/mysql-data/.import-completed
Force Fresh Import
# Remove restoration markers to force fresh import
rm -f ./storage/azerothcore/mysql-data/.restore-*
docker-compose -f docker-compose-azerothcore-database.yml restart ac-db-import
Force Backup Detection
# Restart db-init to re-run backup detection
docker-compose -f docker-compose-azerothcore-database.yml restart ac-db-init
Security Considerations
- Backup validation prevents execution of malicious SQL
- Status markers are read-only after creation
- No additional network exposure
- Maintains existing access controls
Performance Impact
- Positive: Reduces startup time when restoring from backup
- Minimal: Backup detection adds ~5-10 seconds to cold start
- Optimized: Only scans backup directories when needed