2017-12-26 12:46:05 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# set -e
|
|
|
|
|
|
2018-01-06 11:04:08 +01:00
|
|
|
# source job.conf
|
|
|
|
|
BACKUP_DIR=/backups
|
|
|
|
|
CONFIG_DIR=/config
|
|
|
|
|
SSH_CF_DIR=/root/.ssh
|
|
|
|
|
|
|
|
|
|
gen_config(){
|
2018-01-06 12:48:08 +01:00
|
|
|
[ ! -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
|
2018-01-06 11:04:08 +01:00
|
|
|
|
|
|
|
|
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"
|
|
|
|
|
}
|
2017-12-26 12:46:05 +01:00
|
|
|
|
|
|
|
|
backup(){
|
2018-01-06 11:04:08 +01:00
|
|
|
#Konfiguration resetten
|
|
|
|
|
source "/reset-conf.sh"
|
|
|
|
|
|
|
|
|
|
echo Start backup $1
|
|
|
|
|
echo ==================================================
|
|
|
|
|
|
|
|
|
|
# neue Konfiguration lesen
|
|
|
|
|
source "$CONFIG_DIR/$1"
|
|
|
|
|
|
2017-12-26 12:46:05 +01:00
|
|
|
# SCHRITT 1:
|
|
|
|
|
# sichern der MySQL-Datenbanken auf dem remote host
|
2018-01-06 11:04:08 +01:00
|
|
|
# es muss auf dem remote host genug Platz auf der Festplatte geben damit Dump erfolgen kann!
|
|
|
|
|
|
2017-12-26 12:46:05 +01:00
|
|
|
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_DB[@]}]="$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 ...
|
2018-01-06 11:04:08 +01:00
|
|
|
if [ ! -d "$BACKUP_DIR/${REMOTE_HOST}${dir}" ];
|
2017-12-26 12:46:05 +01:00
|
|
|
then
|
|
|
|
|
# ... und gegebenfals anlegen
|
2018-01-06 11:04:08 +01:00
|
|
|
mkdir -p "$BACKUP_DIR/${REMOTE_HOST}${dir}"
|
2017-12-26 12:46:05 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# die eigentliche Sicherung ...
|
2018-01-06 11:04:08 +01:00
|
|
|
rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}"
|
2017-12-26 12:46:05 +01:00
|
|
|
|
|
|
|
|
# alle Sicherungen die älter als $DELETE_OLD_FILES löschen
|
2018-01-06 11:04:08 +01:00
|
|
|
rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "$BACKUP_DIR/${REMOTE_HOST}${dir}"
|
2017-12-26 12:46:05 +01:00
|
|
|
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
|
2018-01-06 11:04:08 +01:00
|
|
|
echo " "
|
|
|
|
|
echo " "
|
2017-12-26 12:46:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ACHTUNG NOCH NICHT FERTIG !!
|
|
|
|
|
restore(){
|
|
|
|
|
for dir in "${FOLDERS[@]}"
|
|
|
|
|
do
|
2018-01-06 11:04:08 +01:00
|
|
|
rdiff-backup -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}"
|
2017-12-26 12:46:05 +01:00
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-06 11:04:08 +01:00
|
|
|
if [ "$1" == "--gen-config" ]; then
|
|
|
|
|
gen_config
|
|
|
|
|
elif [ "$1" == "--backup" ]; then
|
|
|
|
|
backup "$2"
|
|
|
|
|
else
|
|
|
|
|
echo "nichts zu tun?"
|
|
|
|
|
fi
|
2017-12-26 12:46:05 +01:00
|
|
|
|