diff --git a/example_conf.sh b/example_conf.sh index 0a84e5c..8c77501 100644 --- a/example_conf.sh +++ b/example_conf.sh @@ -33,4 +33,8 @@ MYSQL_PASS='secret' # Wo auf dem Remote Server soll SQL_Dump abgelegt werden. # Dieser Ordner wird zusammen mit $FOLDERS gesichert -MYSQL_DUMP_DIR='/var/backups/sqldump' \ No newline at end of file +MYSQL_DUMP_DIR='/var/backups/sqldump' + + +# Die Optionen die beim Backup eingesetzt werden +RDIFF_BACKUP_OPTS="--exclude-sockets --exclude-device-files --exclude-fifos --exclude-other-filesystems" \ No newline at end of file diff --git a/reset-conf.sh b/reset-conf.sh index 3dca586..057154b 100644 --- a/reset-conf.sh +++ b/reset-conf.sh @@ -6,4 +6,6 @@ DELETE_OLD_FILES='8W' MYSQL_DB=() MYSQL_USER='root' MYSQL_PASS='secret' -MYSQL_DUMP_DIR='/var/backups/sqldump' \ No newline at end of file +MYSQL_DUMP_DIR="/var/backups/sqldump" + +RDIFF_BACKUP_OPTS="--exclude-sockets --exclude-device-files --exclude-fifos --exclude-other-filesystems" \ No newline at end of file diff --git a/start.sh b/start.sh index d15bf55..f81b8ec 100755 --- a/start.sh +++ b/start.sh @@ -7,6 +7,17 @@ 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 @@ -22,8 +33,7 @@ gen_config(){ } backup(){ - #Konfiguration resetten - source "/reset-conf.sh" + read_config "$1" echo " " echo Start backup $1 @@ -42,7 +52,8 @@ backup(){ 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\"" + 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 @@ -61,10 +72,18 @@ backup(){ fi # die eigentliche Sicherung ... - rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}" + 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: @@ -77,20 +96,96 @@ backup(){ echo " " } - -# ACHTUNG NOCH NICHT FERTIG !! restore(){ + read_config "$1" + + echo " " + 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 - rdiff-backup -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" + # 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 " " + 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}" + done + + echo Done show $1 + echo " " } if [ "$1" == "--gen-config" ]; then gen_config + elif [ "$1" == "--backup" ]; then - backup "$2" + shift + backup "$@" + +elif [ "$1" == "--restore" ]; then + shift + restore "$@" + +elif [ "$1" == "--list" ]; then + shift + list "$@" + +elif [ "$1" == "--bash" ]; then + shift + /bin/bash "$@" + else - echo "nichts zu tun?" + echo "usage ?" fi