Files
Customer/restore-script.sh

85 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
########## KONFIG ##########
BACKUP_ROOT="/var/backups/fullserver"
PGHOST="localhost"
PGPORT="5432"
PGUSER="florian"
PGDATABASE="oqtane"
# Wohin die Dateien von oqtane.server gehören
OQTANE_DIR="/home/konstantin/oqtane.framework/oqtane.server"
########## BACKUP-ORDNER AUSWÄHLEN ##########
# Aufruf: ./restore-backup.sh [oqtane_TIMESTAMP]
# Ohne Argument -> neuestes Backup verwenden
if [[ $# -ge 1 ]]; then
BACKUP_SUBDIR="$1"
else
BACKUP_SUBDIR="$(ls -1 "${BACKUP_ROOT}" | sort | tail -n 1)"
fi
BACKUP_DIR="${BACKUP_ROOT}/${BACKUP_SUBDIR}"
if [[ ! -d "$BACKUP_DIR" ]]; then
echo "Backup-Verzeichnis nicht gefunden: $BACKUP_DIR"
exit 1
fi
DUMP_FILE="${BACKUP_DIR}/db_${PGDATABASE}.dump"
FILES_ARCHIVE="${BACKUP_DIR}/oqtane_files.tar.gz"
if [[ ! -f "$DUMP_FILE" ]]; then
echo "Dump-Datei nicht gefunden: $DUMP_FILE"
exit 1
fi
echo "Verwende Backup: $BACKUP_DIR"
echo
########## WARNUNG ##########
echo "ACHTUNG:"
echo " - Die Datenbank '${PGDATABASE}' wird GELÖSCHT und aus dem Backup neu erstellt."
echo " - Der Ordner '${OQTANE_DIR}' wird mit den Dateien aus dem Backup überschrieben (Status aus dem Archiv)."
echo
read -rp "Fortfahren? (ja/nein): " answer
if [[ "$answer" != "ja" ]]; then
echo "Abgebrochen."
exit 0
fi
########## 1) DATENBANK WIEDERHERSTELLEN ##########
echo "[DB] Versuche, bestehende Datenbank zu droppen (falls vorhanden)…"
dropdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE" 2>/dev/null || echo "[DB] Datenbank existierte nicht, ok."
echo "[DB] Neue leere Datenbank anlegen…"
createdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE"
echo "[DB] Backup-Dump einspielen…"
pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \
-d "$PGDATABASE" -c "$DUMP_FILE"
echo "[DB] Datenbank-Restore abgeschlossen."
echo
########## 2) DATEIEN VON OQTANE.SERVER WIEDERHERSTELLEN ##########
if [[ -f "$FILES_ARCHIVE" ]]; then
echo "[FILES] Sicherung des aktuellen Oqtane-Ordners…"
if [[ -d "$OQTANE_DIR" ]]; then
mv "$OQTANE_DIR" "${OQTANE_DIR}.old.$(date +%s)"
fi
echo "[FILES] Entpacke ${FILES_ARCHIVE}"
tar -xvpzf "$FILES_ARCHIVE"
echo "[FILES] Dateien-Restore abgeschlossen."
else
echo "[FILES] Archiv ${FILES_ARCHIVE} nicht gefunden, überspringe Dateirestore."
fi
echo
echo "Restore vollständig abgeschlossen."