#!/bin/bash # set -e # source job.conf BACKUP_DIR=/backups CONFIG_DIR=/config SSH_CF_DIR=/root/.ssh gen_config(){ [ ! -f "$SSH_CF_DIR/id_rsa" ] && ssh-keygen -t rsa -b 4096 -f "$SSH_CF_DIR/id_rsa" -q -C "rdiff-backup-dockerized @ ${SSH_KEY_MARKER}" && chmod go-rwx $SSH_CF_DIR/id_rsa if [ ! -f "$SSH_CF_DIR/config" ]; then echo 'Host *' > "$SSH_CF_DIR/config" echo ' StrictHostKeyChecking no' >> "$SSH_CF_DIR/config" # echo ' UserKnownHostsFile=/dev/null' >> "$SSH_CF_DIR/config" chmod go-rwx $SSH_CF_DIR/config fi [ ! -f "$CONFIG_DIR/example_conf.sh" ] && cp /example_conf.sh "$CONFIG_DIR/example_conf.sh" } backup(){ #Konfiguration resetten source "/reset-conf.sh" echo " " echo Start backup $1 echo ================================================== # neue Konfiguration lesen source "$CONFIG_DIR/$1" # SCHRITT 1: # sichern der MySQL-Datenbanken auf dem remote host # es muss auf dem remote host genug Platz auf der Festplatte geben damit Dump erfolgen kann! if [ ${#MYSQL_DB[@]} -gt 0 ] then [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "[ ! -d \"$MYSQL_DUMP_DIR\" ] && mkdir -p \"$MYSQL_DUMP_DIR\"" for db in "${MYSQL_DB[@]}" do ssh ${REMOTE_USER}@${REMOTE_HOST} "mysqldump -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" --add-drop-database --routines --single-transaction \"$db\" > \"$MYSQL_DUMP_DIR/$db.sql\"" done # Ordner mit SQL-Dateien in die Sicherung aufnehmen FOLDERS+=("$MYSQL_DUMP_DIR") fi # SCHRITT 2: # die Sicherung der Ordner (inklusive der SQL-Dump) for dir in "${FOLDERS[@]}" do # prüfen ob das backup-ordner existiert ... if [ ! -d "$BACKUP_DIR/${REMOTE_HOST}${dir}" ]; then # ... und gegebenfals anlegen mkdir -p "$BACKUP_DIR/${REMOTE_HOST}${dir}" fi # die eigentliche Sicherung ... rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}" # alle Sicherungen die älter als $DELETE_OLD_FILES löschen rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "$BACKUP_DIR/${REMOTE_HOST}${dir}" done # SCHRITT 3: # die SQL-Dateien vom remote host wieder löschen if [ ${#MYSQL_DB[@]} -gt 0 ] then [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/\"*.sql" fi echo Done backup $1 echo " " } # ACHTUNG NOCH NICHT FERTIG !! restore(){ for dir in "${FOLDERS[@]}" do rdiff-backup -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" done } if [ "$1" == "--gen-config" ]; then gen_config elif [ "$1" == "--backup" ]; then backup "$2" else echo "nichts zu tun?" fi