Files
rdiff-backup-dockerized/start.sh
T
info 37a7ae8d69 Die Bassisimage ist ab sofort ubuntu:18.04
+ --list erzeugt nun übersichtlichere Auflistung
2018-08-17 19:59:14 +02:00

190 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
# set -e
# source job.conf
BACKUP_DIR=/backups
CONFIG_DIR=/config
SSH_CF_DIR=/root/.ssh
read_config(){
#Konfiguration resetten
source "/reset-conf.sh"
if [ ! -f "$CONFIG_DIR/$1" ]; then
echo config nicht vorhanden!z
exit 1
fi
}
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(){
read_config "$1"
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
echo dumb database: "$db"
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysqldump -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" --events --routines --triggers --single-transaction --add-drop-database -B \"$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 ...
echo backup file[s]: "$dir"
rdiff-backup $RDIFF_BACKUP_OPTS "${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}"
# Liste der Sicherungen anzeigen
if [ "$2" == "--list" ]; then
rdiff-backup -l "$BACKUP_DIR/${REMOTE_HOST}${dir}"
fi
echo
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
}
restore(){
read_config "$1"
echo Start restore $1
echo ==================================================
# neue Konfiguration lesen
source "$CONFIG_DIR/$1"
# SCHRITT 1:
# Alle Dateien und Ordner aus dem letzten Backup wiederherstellen
if [ ${#MYSQL_DB[@]} -gt 0 ]
then
FOLDERS+=("$MYSQL_DUMP_DIR")
fi
for dir in "${FOLDERS[@]}"
do
# die eigentliche Wiederherstellung ...
echo restore file[s]: "$dir" "$2"
if [ "$2" != "" ]; then
rdiff-backup --force -r "$2" "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}"
else
rdiff-backup --force -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}"
fi
done
# SCHRITT 2:
# Datenbanken wiederherstellen
for db in "${MYSQL_DB[@]}"
do
echo restore database: "$db"
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysql -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" < \"$MYSQL_DUMP_DIR/$db.sql\""
[ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/$db.sql\""
done
echo Done restore $1
echo
}
list(){
read_config "$1"
echo Show backups of $1
echo ==================================================
# neue Konfiguration lesen
source "$CONFIG_DIR/$1"
if [ ${#MYSQL_DB[@]} -gt 0 ]
then
FOLDERS+=("$MYSQL_DUMP_DIR")
fi
for dir in "${FOLDERS[@]}"
do
echo show backups for file[s]: "$dir"
rdiff-backup -l "$BACKUP_DIR/${REMOTE_HOST}${dir}"
echo
done
echo Done show $1
echo
}
if [ "$1" == "--gen-config" ]; then
gen_config
elif [ "$1" == "--backup" ]; then
shift
backup "$@"
elif [ "$1" == "--restore" ]; then
shift
restore "$@"
elif [ "$1" == "--list" ]; then
shift
list "$@"
elif [ "$1" == "--bash" ]; then
shift
/bin/bash "$@"
else
echo "usage ?"
fi