diff --git a/scripts/db-import.sh b/scripts/db-import.sh index 8064dcb..f794a35 100644 --- a/scripts/db-import.sh +++ b/scripts/db-import.sh @@ -5,10 +5,6 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" DUMP_FILE="" -TARGET_HOST="127.0.0.1" -TARGET_PORT="3306" -TARGET_USER="root" -TARGET_PASSWORD="" DRY_RUN=0 FORCE=0 @@ -19,62 +15,47 @@ if [[ -f "$ENV_FILE" ]]; then set +a fi -# Use password from .env if not overridden -TARGET_PASSWORD="${TARGET_PASSWORD:-${DOCKER_DB_ROOT_PASSWORD:-}}" - usage() { cat <&2; exit 1; } -mysql_cmd() { - mysql \ - --host="$TARGET_HOST" \ - --port="$TARGET_PORT" \ - --user="$TARGET_USER" \ - --password="$TARGET_PASSWORD" \ - --connect-timeout=10 \ - "$@" +require_running_db() { + if ! docker compose ps --status running --services 2>/dev/null | grep -qx 'ac-database'; then + die "ac-database is not running. Start it with: docker compose up -d ac-database" + fi +} + +mysql_exec() { + docker compose exec -T ac-database bash -lc \ + "mysql -uroot -p\"\$MYSQL_ROOT_PASSWORD\"" } # ── argument parsing ────────────────────────────────────────────────────────── while (($#)); do case "$1" in - --from) DUMP_FILE="$2"; shift ;; - --host) TARGET_HOST="$2"; shift ;; - --port) TARGET_PORT="$2"; shift ;; - --user) TARGET_USER="$2"; shift ;; - --password) TARGET_PASSWORD="$2"; shift ;; - --dry-run) DRY_RUN=1 ;; - --force) FORCE=1 ;; - -h|--help) usage; exit 0 ;; + --from) DUMP_FILE="$2"; shift ;; + --dry-run) DRY_RUN=1 ;; + --force) FORCE=1 ;; + -h|--help) usage; exit 0 ;; *) printf 'Unknown option: %s\n\n' "$1" >&2; usage >&2; exit 1 ;; esac shift @@ -84,11 +65,6 @@ done [[ -z "$DUMP_FILE" ]] && { usage >&2; die "--from FILE is required"; } [[ -f "$DUMP_FILE" ]] || die "file not found: $DUMP_FILE" -[[ -z "$TARGET_PASSWORD" ]] && die "no password set — use --password or set DOCKER_DB_ROOT_PASSWORD in .env" - -if ! command -v mysql >/dev/null 2>&1; then - die "'mysql' client not found. Install it: apt install mysql-client or brew install mysql-client" -fi cd "$ROOT_DIR" @@ -97,9 +73,8 @@ cd "$ROOT_DIR" file_size="$(du -sh "$DUMP_FILE" | cut -f1)" printf '\nMigration plan:\n' -printf ' Source file : %s (%s)\n' "$DUMP_FILE" "$file_size" -printf ' Target host : %s:%s\n' "$TARGET_HOST" "$TARGET_PORT" -printf ' Target user : %s\n\n' "$TARGET_USER" +printf ' Source : %s (%s)\n' "$DUMP_FILE" "$file_size" +printf ' Target : ac-database container\n\n' if [[ "$DRY_RUN" -eq 1 ]]; then log "dry-run mode — nothing imported" @@ -112,27 +87,21 @@ if [[ "$FORCE" -eq 0 ]]; then [[ "$confirm" =~ ^[Yy]$ ]] || { log "aborted"; exit 0; } fi -# ── connectivity check ──────────────────────────────────────────────────────── - -log "checking connection to ${TARGET_HOST}:${TARGET_PORT}..." -if ! mysql_cmd --execute="SELECT 1;" >/dev/null 2>&1; then - die "cannot connect to MySQL at ${TARGET_HOST}:${TARGET_PORT} as ${TARGET_USER}" -fi -log "connection OK" - # ── import ──────────────────────────────────────────────────────────────────── -log "restoring $DUMP_FILE → ${TARGET_HOST}:${TARGET_PORT}..." +require_running_db + +log "restoring $DUMP_FILE into ac-database..." log "this may take several minutes..." if [[ "$DUMP_FILE" == *.gz ]]; then - zcat "$DUMP_FILE" | mysql_cmd + zcat "$DUMP_FILE" | mysql_exec else - mysql_cmd < "$DUMP_FILE" + mysql_exec < "$DUMP_FILE" fi log "import complete" log "" -log "next steps on the new server:" -log " 1. Update realmlist: bash scripts/sync-realmlist.sh" +log "next steps:" +log " 1. Update realmlist: bash sync-realmlist.sh" log " 2. Start the server: bash scripts/prod-deploy.sh --no-build"