diff --git a/Backup/mysql-dumps.sh b/Backup/mysql-dumps.sh index cf6edaa..cad9ae1 100755 --- a/Backup/mysql-dumps.sh +++ b/Backup/mysql-dumps.sh @@ -22,8 +22,8 @@ function echo_success() { } # Variablen -LOG_FILE="./dump.log" -BACKUP_DIR="./Docker/mysql/Backup/" +LOG_FILE="./mysql_dump.log" +BACKUP_DIR="./MySQL-Backup/" FOUND_CONTAINERS=$(docker ps --format "{{.Names}}") CONTAINERS=$(docker ps --format "{{.Image}} {{.Names}}" | grep "^mysql" | awk '{print $2}') DATE=$(TZ=Europe/Berlin date +'%Y-%m-%d_%H-%M-%S') diff --git a/Backup/postgres-dumps.sh b/Backup/postgres-dumps.sh new file mode 100755 index 0000000..519d234 --- /dev/null +++ b/Backup/postgres-dumps.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# ======== Ausgabe-Funktionen ======== +function echo_info() { + echo -e "\e[32m[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1\e[0m" + echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1" >> "$LOG_FILE" +} + +function echo_warning() { + echo -e "\e[33m[$(date +'%Y-%m-%d %H:%M:%S')] [WARNUNG] $1\e[0m" + echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARNUNG] $1" >> "$LOG_FILE" +} + +function echo_error() { + echo -e "\e[31m[$(date +'%Y-%m-%d %H:%M:%S')] [FEHLER] $1\e[0m" + echo "[$(date +'%Y-%m-%d %H:%M:%S')] [FEHLER] $1" >> "$LOG_FILE" +} + +function echo_success() { + echo -e "\e[34m[$(date +'%Y-%m-%d %H:%M:%S')] [ERFOLG] $1\e[0m" + echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERFOLG] $1" >> "$LOG_FILE" +} + +# ======== Variablen ======== +LOG_FILE="./pg_dump.log" +BACKUP_DIR="./PG-Backup/" +DATE=$(TZ=Europe/Berlin date +'%Y-%m-%d_%H-%M-%S') + +# ======== Backup-Verzeichnis prüfen ======== +echo_info "---------- PostgreSQL Backup gestartet: $DATE ----------" + +if [ ! -d "$BACKUP_DIR" ]; then + echo_info "Backup-Verzeichnis $BACKUP_DIR existiert nicht. Erstelle..." + mkdir -p "$BACKUP_DIR" + + if [ $? -eq 0 ]; then + echo_success "Verzeichnis $BACKUP_DIR erfolgreich erstellt." + else + echo_error "Fehler beim Erstellen des Backup-Verzeichnisses. Abbruch." + exit 1 + fi +fi + +# ======== Alle Container prüfen, ob PostgreSQL läuft ======== +ALL_CONTAINERS=$(docker ps --format "{{.Names}}") +POSTGRES_CONTAINERS=() + +for CONTAINER in $ALL_CONTAINERS; do + if docker exec "$CONTAINER" psql --version >/dev/null 2>&1; then + POSTGRES_CONTAINERS+=("$CONTAINER") + echo_info "PostgreSQL erkannt in Container: $CONTAINER" + fi +done + +# ======== Backup jeder Datenbank in jedem Container ======== +for CONTAINER in "${POSTGRES_CONTAINERS[@]}"; do + # Passwort holen + POSTGRES_PASSWORD=$(docker exec "$CONTAINER" printenv POSTGRES_PASSWORD) + + if [ -z "$POSTGRES_PASSWORD" ]; then + echo_warning "Kein POSTGRES_PASSWORD in $CONTAINER gefunden. Überspringe..." + continue + fi + + # Alle Nicht-Systemdatenbanken holen + DATABASES=$(docker exec "$CONTAINER" bash -c "PGPASSWORD=$POSTGRES_PASSWORD psql -U postgres -t -c \"SELECT datname FROM pg_database WHERE datistemplate = false;\"") + + for DB in $DATABASES; do + DB=$(echo "$DB" | xargs) # Leerzeichen trimmen + if [ -z "$DB" ]; then + continue + fi + + DUMP_FILE="$BACKUP_DIR/${CONTAINER}-${DB}-${DATE}.sql" + echo_info "Erstelle Dump für $DB aus $CONTAINER..." + docker exec "$CONTAINER" bash -c "PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U postgres $DB" > "$DUMP_FILE" + + if [ $? -eq 0 ]; then + echo_success "Dump gespeichert: $DUMP_FILE" + else + echo_error "Fehler beim Dump von $DB aus $CONTAINER." + fi + done +done + +echo_info "PostgreSQL Backup abgeschlossen." +