Files
linux-scripts/Backup/mysql-dumps.sh

81 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Funktion für Ausgaben
function echo_info() {
echo -e "\e[32m[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1\e[0m"
echo -e "[$(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 -e "[$(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 -e "[$(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 -e "[$(date +'%Y-%m-%d %H:%M:%S')] [ERFOLG] $1" >> "$LOG_FILE"
}
# Variablen
LOG_FILE="./dump.log"
BACKUP_DIR="./Docker/mysql/Backup/"
CONTAINERS=$(docker ps --filter "ancestor=mysql:8" --format "{{.Names}}")
DATE=$(TZ=Europe/Berlin date +'%Y-%m-%d_%H-%M-%S')
# Log Datei aktualisieren
echo_info "---------- Backup gestartet: $DATE ----------"
# Überprüfen, ob das Backup-Verzeichnis existiert und ggf. erstellen
if [ ! -d "$BACKUP_DIR" ]; then
echo "Das Verzeichnis $BACKUP_DIR existiert nicht. Erstelle es..."
mkdir -p "$BACKUP_DIR"
if [ $? -eq 0 ]; then
echo_success "Verzeichnis $BACKUP_DIR erfolgreich erstellt."
else
echo_error "Fehler beim Erstellen des Verzeichnisses $BACKUP_DIR. Skript wird abgebrochen."
exit 1
fi
fi
# Liste aller MySQL Container
CONTAINERS=$(docker ps --filter "ancestor=mysql:8" --format "{{.Names}}")
for CONTAINER in $CONTAINERS; do
echo_info "Gefundene Container: $CONTAINER"
done
# Aktuelles Datum
DATE=$(TZ=Europe/Berlin date +'%Y-%m-%d_%H-%M-%S')
# Loop über Container
for CONTAINER in $CONTAINERS; do
# Root Passwort aus Environment-Variablen oder docker secrets auslesen
MYSQL_ROOT_PASSWORD=$(docker exec $CONTAINER printenv MYSQL_ROOT_PASSWORD)
if [ -z "$MYSQL_ROOT_PASSWORD" ]; then
echo_warning "Kein Root-Passwort für Container $CONTAINER gefunden. Skippen..."
continue
fi
# Liste der Datenbanken im Container
DATABASES=$(docker exec $CONTAINER mysql -p"$MYSQL_ROOT_PASSWORD" -e "SHOW DATABASES;" | tail -n +2)
# Loop über Datenbanken + Dump für jede Datenbank erstellen
for DATABASE in $DATABASES; do
# System-Datenbanken überspringen
if [[ "$DATABASE" == "information_schema" || "$DATABASE" == "performance_schema" || "$DATABASE" == "mysql" || "$DATABASE" == "sys" ]]; then
continue
fi
# Dump erstellen
echo_info "Dump für Datenbank $DATABASE aus Container $CONTAINER erstellen..."
docker exec $CONTAINER mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --databases "$DATABASES" > "$BACKUP_DIR/$CONTAINER-$DATABASE-$DATE.sql"
done
done
echo_info "Fertig"