#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # shellcheck source=./mysql_common.sh source "$SCRIPT_DIR/mysql_common.sh" usage() { cat <<'EOF' Użycie: restore_all.sh [--restore-users] Opis: Przywraca wszystkie bazy MySQL z katalogu backupu. Jeśli obecny jest plik `_globals.sql` lub `_globals.sql.gz`, można go odtworzyć flagą `--restore-users`. EOF } BACKUP_DIR="" RESTORE_USERS="0" for arg in "$@"; do case "$arg" in --help|-h) usage exit 0 ;; --restore-users) RESTORE_USERS="1" ;; *) if [ -n "$BACKUP_DIR" ]; then echo "Podano więcej niż jeden katalog backupu." >&2 exit 1 fi BACKUP_DIR="$arg" ;; esac done [ -n "$BACKUP_DIR" ] || { usage exit 1 } [ -d "$BACKUP_DIR" ] || { echo "Katalog nie istnieje: $BACKUP_DIR" >&2 exit 1 } mysql_load_alt_credentials if [ "$RESTORE_USERS" = "1" ]; then for globals_file in "$BACKUP_DIR/_globals.sql.gz" "$BACKUP_DIR/_globals.sql"; do [ -f "$globals_file" ] || continue mysql_restore_stream mysql "$globals_file" break done fi find "$BACKUP_DIR" -maxdepth 1 -type f \( -name '*.sql' -o -name '*.sql.gz' \) ! -name '_globals.*' | sort | while IFS= read -r file; do [ -n "$file" ] || continue db_name="$(basename "$file" | sed -E 's/\.sql(\.gz)?$//')" db_name="$(mysql_safe_identifier "$db_name")" mysql_exec mysql -e "DROP DATABASE IF EXISTS $(mysql_quote_identifier "$db_name");" mysql_exec mysql -e "CREATE DATABASE $(mysql_quote_identifier "$db_name") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" mysql_restore_stream "$db_name" "$file" echo "Przywrócono ${db_name}" done