#!/usr/bin/env bash # Rebuild acore_world from data/sql/base/db_world only (AzerothCore "shortcut"): # the shipped base `updates` table already records archived migrations as applied, # so worldserver only needs to run pending files under data/sql/updates/db_world # (and your custom/pending paths if used). # # Usage: # export MYSQL_PWD='...' # ./scripts/world-db-from-base.sh -h 10.0.13.252 -u acore -D acore_world # # Requires: mysql client. Optional: pass --force to skip confirmation. set -euo pipefail usage() { echo "Usage: $0 -h HOST -u USER -D DATABASE [--port PORT] [--force]" >&2 echo " Or set: MYSQL_HOST MYSQL_USER MYSQL_DATABASE [MYSQL_PWD in env]" >&2 exit 1 } HOST="${MYSQL_HOST:-}" USER="${MYSQL_USER:-}" DBNAME="${MYSQL_DATABASE:-}" PORT="${MYSQL_PORT:-3306}" FORCE=0 while [[ $# -gt 0 ]]; do case "$1" in -h) HOST="$2"; shift 2 ;; -u) USER="$2"; shift 2 ;; -D) DBNAME="$2"; shift 2 ;; --port) PORT="$2"; shift 2 ;; --force) FORCE=1; shift ;; *) usage ;; esac done : "${HOST:?set -h or MYSQL_HOST}" : "${USER:?set -u or MYSQL_USER}" : "${DBNAME:?set -D or MYSQL_DATABASE}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" BASE_DIR="$REPO_ROOT/data/sql/base/db_world" if [[ ! -d "$BASE_DIR" ]]; then echo "Base directory not found: $BASE_DIR" >&2 exit 1 fi if [[ "$FORCE" -ne 1 ]]; then read -r -p "DESTROY database '$DBNAME' on $HOST and rebuild from base? [yes/no]: " ans [[ "$ans" == "yes" ]] || { echo "Aborted."; exit 1; } fi MYSQL=(mysql -h "$HOST" -P "$PORT" -u "$USER" --protocol=tcp) "${MYSQL[@]}" -e "DROP DATABASE IF EXISTS \`$DBNAME\`; CREATE DATABASE \`$DBNAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" mapfile -t SQL_FILES < <(find "$BASE_DIR" -maxdepth 1 -name '*.sql' -printf '%f\n' | sort) for f in "${SQL_FILES[@]}"; do echo ">> $f" "${MYSQL[@]}" "$DBNAME" <"$BASE_DIR/$f" done echo ">> Done. Start worldserver once; it should report World DB up-to-date or only apply updates/db_world."