Backup und restore für die DB dazu gebaut
This commit is contained in:
Binary file not shown.
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
# backup-db.sh
|
||||
set -euo pipefail
|
||||
source /Users/rxf/Projekte/wetterstation/.env
|
||||
|
||||
BACKUP_DIR="/Users/rxf/Projekte/wetterstation/backups"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
FILENAME="wetterstation_$(date +%Y%m%d_%H%M).dump"
|
||||
|
||||
docker exec wetterstation_db pg_dump -U "$DB_USER" -d "$DB_NAME" -F c -f /tmp/backup.dump
|
||||
docker cp wetterstation_db:/tmp/backup.dump "$BACKUP_DIR/$FILENAME"
|
||||
docker exec wetterstation_db rm /tmp/backup.dump
|
||||
|
||||
# Alte Backups löschen (älter als 30 Tage)
|
||||
find "$BACKUP_DIR" -name "*.dump" -mtime +30 -delete
|
||||
|
||||
echo "Backup gespeichert: $BACKUP_DIR/$FILENAME"
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
# restore-db.sh – Wetterstation PostgreSQL-Datenbank wiederherstellen
|
||||
# Verwendung:
|
||||
# ./restore-db.sh # interaktiv – wählt aus vorhandenen Backups
|
||||
# ./restore-db.sh backups/wetterstation_20260502_0300.dump # direkt mit Datei
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ENV_FILE="$SCRIPT_DIR/.env"
|
||||
BACKUP_DIR="$SCRIPT_DIR/backups"
|
||||
CONTAINER="wetterstation_db"
|
||||
|
||||
# ── .env laden ──────────────────────────────────────────────────────────────
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "FEHLER: .env nicht gefunden: $ENV_FILE"
|
||||
exit 1
|
||||
fi
|
||||
source "$ENV_FILE"
|
||||
|
||||
echo "=========================================="
|
||||
echo " Wetterstation – DB-Restore"
|
||||
echo "=========================================="
|
||||
echo " Datenbank : $DB_NAME"
|
||||
echo " Benutzer : $DB_USER"
|
||||
echo " Container : $CONTAINER"
|
||||
echo ""
|
||||
|
||||
# ── Backup-Datei bestimmen ────────────────────────────────────────────────
|
||||
if [[ $# -ge 1 ]]; then
|
||||
DUMP_FILE="$1"
|
||||
else
|
||||
# Interaktiv: alle *.dump-Dateien im Backup-Verzeichnis auflisten
|
||||
if [[ ! -d "$BACKUP_DIR" ]]; then
|
||||
echo "FEHLER: Backup-Verzeichnis nicht gefunden: $BACKUP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mapfile -t DUMPS < <(find "$BACKUP_DIR" -name "*.dump" | sort -r)
|
||||
|
||||
if [[ ${#DUMPS[@]} -eq 0 ]]; then
|
||||
echo "FEHLER: Keine Backup-Dateien in $BACKUP_DIR gefunden."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Verfügbare Backups (neuestes zuerst):"
|
||||
for i in "${!DUMPS[@]}"; do
|
||||
SIZE=$(du -sh "${DUMPS[$i]}" | cut -f1)
|
||||
echo " [$((i+1))] $(basename "${DUMPS[$i]}") ($SIZE)"
|
||||
done
|
||||
echo ""
|
||||
read -rp "Welches Backup wiederherstellen? [1-${#DUMPS[@]}]: " CHOICE
|
||||
|
||||
if ! [[ "$CHOICE" =~ ^[0-9]+$ ]] || (( CHOICE < 1 || CHOICE > ${#DUMPS[@]} )); then
|
||||
echo "Ungültige Auswahl. Abbruch."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DUMP_FILE="${DUMPS[$((CHOICE-1))]}"
|
||||
fi
|
||||
|
||||
if [[ ! -f "$DUMP_FILE" ]]; then
|
||||
echo "FEHLER: Datei nicht gefunden: $DUMP_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DUMP_SIZE=$(du -sh "$DUMP_FILE" | cut -f1)
|
||||
echo "Gewähltes Backup : $(basename "$DUMP_FILE") ($DUMP_SIZE)"
|
||||
echo ""
|
||||
|
||||
# ── Sicherheitsabfrage ────────────────────────────────────────────────────
|
||||
echo "WARNUNG: Der Restore überschreibt alle vorhandenen Daten in '$DB_NAME'!"
|
||||
read -rp "Wirklich fortfahren? (ja/n): " CONFIRM
|
||||
|
||||
if [[ "$CONFIRM" != "ja" ]]; then
|
||||
echo "Abgebrochen."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ── Container prüfen ─────────────────────────────────────────────────────
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "FEHLER: Container '$CONTAINER' läuft nicht."
|
||||
echo "Starte ihn mit: docker compose up -d postgres"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Restore durchführen ──────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "Kopiere Dump in Container..."
|
||||
docker cp "$DUMP_FILE" "${CONTAINER}:/tmp/restore.dump"
|
||||
|
||||
echo "Stelle Datenbank wieder her..."
|
||||
docker exec "$CONTAINER" pg_restore \
|
||||
-U "$DB_USER" \
|
||||
-d "$DB_NAME" \
|
||||
--clean \
|
||||
--if-exists \
|
||||
--no-owner \
|
||||
--no-privileges \
|
||||
-F c \
|
||||
/tmp/restore.dump
|
||||
|
||||
echo "Räume auf..."
|
||||
docker exec "$CONTAINER" rm /tmp/restore.dump
|
||||
|
||||
echo ""
|
||||
echo "✓ Restore abgeschlossen: $(basename "$DUMP_FILE")"
|
||||
Reference in New Issue
Block a user