92 lines
3.1 KiB
Bash
Executable File
92 lines
3.1 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"
|
|
}
|
|
|
|
|
|
# ======== ASCII Art ========
|
|
cat << "EOF"
|
|
__ __ ____ ___ _ ____ _
|
|
| \/ |_ _/ ___| / _ \| | | __ ) __ _ ___| | ___ _ _ __
|
|
| |\/| | | | \___ \| | | | | | _ \ / _\` |/ __| |/ / | | | '_ \
|
|
| | | | |_| |___) | |_| | |___ | |_) | (_| | (__| <| |_| | |_) |
|
|
|_| |_|\__, |____/ \__\_\_____| |____/ \__,_|\___|_|\_\\__,_| .__/
|
|
|___/ |_|
|
|
EOF
|
|
|
|
|
|
# ======== Variablen ========
|
|
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')
|
|
|
|
|
|
# ======== Backup Directory erstellen ========
|
|
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
|
|
|
|
|
|
# ======== Loop über Container ========
|
|
for CONTAINER in $CONTAINERS; do
|
|
# Container ausgeben
|
|
echo_info "Gefundener Container: $CONTAINER"
|
|
|
|
# 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
|
|
|
|
|
|
# ======== Finish ========
|
|
echo_info "Fertig"
|