#!/bin/bash # Restore auth and character databases from ImportBackup/ and verify service health. set -euo pipefail BACKUP_DIR="${1:-ImportBackup}" MYSQL_PW="${MYSQL_ROOT_PASSWORD:-azerothcore123}" DB_AUTH="${DB_AUTH_NAME:-acore_auth}" DB_CHAR="${DB_CHARACTERS_NAME:-acore_characters}" DB_WORLD="${DB_WORLD_NAME:-acore_world}" COLOR_RED='\033[0;31m' COLOR_GREEN='\033[0;32m' COLOR_YELLOW='\033[1;33m' COLOR_RESET='\033[0m' usage(){ cat < "$out" } restore(){ local db="$1" local dump="$2" log "Importing $dump into $db" case "$dump" in *.gz) gzip -dc "$dump" ;; *.sql) cat "$dump" ;; *) err "Unsupported dump format: $dump"; exit 1;; esac | docker exec -i ac-mysql mysql -uroot -p"$MYSQL_PW" "$db" } log "Stopping world/auth services" docker stop ac-worldserver ac-authserver >/dev/null || warn "Services already stopped" backup_db "$DB_AUTH" restore "$DB_AUTH" "$AUTH_DUMP" backup_db "$DB_CHAR" restore "$DB_CHAR" "$CHAR_DUMP" if [[ -n "$WORLD_DUMP" ]]; then read -rp "World dump detected (${WORLD_DUMP##*/}). Restore it as well? [y/N]: " ANSWER if [[ "$ANSWER" =~ ^[Yy]$ ]]; then backup_db "$DB_WORLD" restore "$DB_WORLD" "$WORLD_DUMP" else warn "Skipping world database restore" fi fi log "Reapplying module SQL patches" docker compose --profile db --profile modules run --rm \ --entrypoint /bin/sh ac-modules \ -c 'apk add --no-cache bash curl >/dev/null && bash /tmp/scripts/manage-modules.sh >/tmp/mm.log && cat /tmp/mm.log' || warn "Module SQL run exited with non-zero status" log "Restarting services" docker start ac-authserver ac-worldserver >/dev/null sleep 5 count_rows(){ docker exec ac-mysql mysql -uroot -p"$MYSQL_PW" -N -B -e "$1" } ACCOUNTS=$(count_rows "SELECT COUNT(*) FROM ${DB_AUTH}.account;") CHARS=$(count_rows "SELECT COUNT(*) FROM ${DB_CHAR}.characters;") log "Accounts: $ACCOUNTS" log "Characters: $CHARS" ./status.sh --once || warn "status.sh reported issues; inspect manually." log "Import completed."