Import postgresql plugin
This commit is contained in:
Executable
+127
@@ -0,0 +1,127 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# dbrestore.sh
|
||||
# Przywracanie pojedynczej bazy PostgreSQL z pliku .sql lub .sql.gz
|
||||
# wykonanego przez postgres_backup.sh
|
||||
# =============================================================================
|
||||
|
||||
CREDENTIALS_FILE="/usr/local/directadmin/conf/postgresql.conf"
|
||||
|
||||
# Kolory tylko na terminalu
|
||||
if [[ -t 1 ]]; then
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||||
else
|
||||
RED=''; GREEN=''; YELLOW=''; NC=''
|
||||
fi
|
||||
|
||||
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||||
info() { echo -e " $*"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
die() { echo -e "${RED}[BŁĄD]${NC} $*" >&2; exit 1; }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Sposób użycia
|
||||
# ---------------------------------------------------------------------------
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Użycie:
|
||||
$(basename "$0") <plik.sql|plik.sql.gz>
|
||||
|
||||
Opis:
|
||||
Przywraca bazę danych z pliku wykonanego przez postgres_backup.sh.
|
||||
Obsługuje pliki nieskompresowane (.sql) i skompresowane (.sql.gz).
|
||||
Jeśli docelowa baza istnieje, zostanie usunięta i odtworzona od nowa.
|
||||
|
||||
Przykłady:
|
||||
$(basename "$0") /home/admin/postgres_backup/19-02-2026/sklep.sql
|
||||
$(basename "$0") /home/admin/postgres_backup/19-02-2026/sklep.sql.gz
|
||||
|
||||
Uwaga:
|
||||
Plik poświadczeń: ${CREDENTIALS_FILE}
|
||||
Baza 'postgres' jest przywracana przez połączenie do 'template1',
|
||||
pozostałe bazy – przez połączenie do 'postgres'.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Argumenty
|
||||
# ---------------------------------------------------------------------------
|
||||
if [[ $# -eq 0 ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
FILE="$1"
|
||||
|
||||
[[ -f "$FILE" ]] || die "Plik nie istnieje: ${FILE}"
|
||||
|
||||
case "$FILE" in
|
||||
*.sql.gz|*.sql) ;;
|
||||
*) die "Nieobsługiwany format pliku. Oczekiwany: .sql lub .sql.gz" ;;
|
||||
esac
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Poświadczenia
|
||||
# ---------------------------------------------------------------------------
|
||||
[[ -f "$CREDENTIALS_FILE" ]] \
|
||||
|| die "Brak pliku poświadczeń: ${CREDENTIALS_FILE}"
|
||||
|
||||
_perms=$(stat -c '%a' "$CREDENTIALS_FILE")
|
||||
[[ "$_perms" == "600" || "$_perms" == "400" ]] \
|
||||
|| die "Zbyt otwarte uprawnienia na ${CREDENTIALS_FILE} (${_perms}). Wymagane: 600 lub 400."
|
||||
|
||||
_line=$(head -1 "$CREDENTIALS_FILE")
|
||||
PGHOST=$(echo "$_line" | cut -d: -f1)
|
||||
PGPORT=$(echo "$_line" | cut -d: -f2)
|
||||
PGUSER=$(echo "$_line" | cut -d: -f4)
|
||||
|
||||
[[ -n "$PGHOST" && -n "$PGPORT" && -n "$PGUSER" ]] \
|
||||
|| die "Nieprawidłowy format pliku poświadczeń. Oczekiwany: host:port:database:user:password"
|
||||
|
||||
export PGPASSFILE="$CREDENTIALS_FILE"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ustal bazę inicjalną (nie można przywracać 'postgres' będąc do niej podłączonym)
|
||||
# ---------------------------------------------------------------------------
|
||||
DB_NAME=$(basename "$FILE" | sed 's/\.sql\.gz$//; s/\.sql$//')
|
||||
|
||||
if [[ "$DB_NAME" == "postgres" ]]; then
|
||||
INIT_DB="template1"
|
||||
else
|
||||
INIT_DB="postgres"
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Przywracanie
|
||||
# ---------------------------------------------------------------------------
|
||||
echo ""
|
||||
ok "Plik: ${FILE}"
|
||||
info "Baza: ${DB_NAME}"
|
||||
info "Serwer: ${PGHOST}:${PGPORT} Użytkownik: ${PGUSER}"
|
||||
echo ""
|
||||
|
||||
case "$FILE" in
|
||||
*.sql.gz)
|
||||
gunzip -c "$FILE" \
|
||||
| psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \
|
||||
--no-password -d "$INIT_DB"
|
||||
RC=${PIPESTATUS[1]}
|
||||
;;
|
||||
*.sql)
|
||||
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \
|
||||
--no-password -d "$INIT_DB" -f "$FILE"
|
||||
RC=$?
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
if [[ $RC -eq 0 ]]; then
|
||||
ok "Przywracanie bazy '${DB_NAME}' zakończone pomyślnie."
|
||||
else
|
||||
warn "Przywracanie bazy '${DB_NAME}' zakończone z ostrzeżeniami lub błędami (kod: ${RC})."
|
||||
warn "Sprawdź powyższy output w celu identyfikacji problemów."
|
||||
fi
|
||||
|
||||
exit $RC
|
||||
Reference in New Issue
Block a user