diff --git a/example_conf.sh b/example_conf.sh index 61584c2..93e9167 100644 --- a/example_conf.sh +++ b/example_conf.sh @@ -7,6 +7,9 @@ REMOTE_USER='root' # Wechle Ordner sollen gesichert werden als BASH-Array z.B. ("/home" "/var/www") FOLDERS=() +# Wechle Docker volumes sollen gesichert werden als BASH-Array z.B. ("vol-1" "redis-vol-1") +DOCKER_VOLUME=() + # Wie lange sollen Backups gesichert bleiben z.B. 8W # ================================================== # Remove the incremental backup information in the destination @@ -39,6 +42,5 @@ MYSQL_PASS='secret' # Dieser Ordner wird zusammen mit $FOLDERS gesichert 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 +RDIFF_BACKUP_OPTS="--exclude-sockets --exclude-device-files --exclude-fifos --exclude-other-filesystems" diff --git a/reset-conf.sh b/reset-conf.sh index 7ccecce..60fd795 100644 --- a/reset-conf.sh +++ b/reset-conf.sh @@ -1,6 +1,7 @@ REMOTE_HOST='' REMOTE_USER='root' FOLDERS=() +DOCKER_VOLUME=() DELETE_OLD_FILES='8W' MYSQL_DB=() diff --git a/start.sh b/start.sh index 88b3c7e..c825a36 100755 --- a/start.sh +++ b/start.sh @@ -68,7 +68,6 @@ b_files(){ fi # die eigentliche Sicherung ... - echo backup file[s]: "$1" rdiff-backup $RDIFF_BACKUP_OPTS "$1" "$2" # alle Sicherungen die älter als $DELETE_OLD_FILES löschen @@ -88,11 +87,6 @@ export_sql(){ fi } -b_vol(){ - ## Docker volume mit rdiff-backup sichern - sleep 1 -} - backup(){ read_config "$1" @@ -133,12 +127,31 @@ backup(){ for dir in "${FOLDERS[@]}" do # die eigentliche Sicherung ... - b_files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "${BACKUP_DIR_FILES}/${dir}" + echo backup file[s]: "$dir" + [ "$dir" != "" ] && b_files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "${BACKUP_DIR_FILES}/${dir}" # Liste der Sicherungen anzeigen if [ "$2" == "--list" ]; then rdiff-backup -l "${BACKUP_DIR_FILES}/${dir}" fi + echo + done + + # SCHRIT 3: + # die Sicherung der Docker volumes + for vol in "${DOCKER_VOLUME[@]}" + do + echo backup Docker volume: "$vol" + # herausfinden wo die volume gespeicher ist + dir=$(ssh ${REMOTE_USER}@${REMOTE_HOST} docker volume inspect -f "{{.Mountpoint}}" "$vol") + + # und die eigentliche Sicherung ... + [ "$dir" != "" ] && b_files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "${BACKUP_DIR_VOLS}/${vol}" + + # Liste der Sicherungen anzeigen + if [ "$2" == "--list" ]; then + rdiff-backup -l "${BACKUP_DIR_VOLS}/${vol}" + fi echo done @@ -180,20 +193,10 @@ import_sql(){ [ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/${1}.sql\"" } -r_vol(){ - ## Docker volume mit rdiff-backup wiederherstellen - sleep 1 -} - -r_mysql_cont(){ - ## Import einer MySQL-DB von einem SQL-Script aus einem vorher (!) wiederherstellen Ordner in ein Container - sleep 1 -} - restore(){ read_config "$1" - echo Start restore $1 to $2 + echo Start restore $1 from $2 echo ================================================== # SCHRITT 1: @@ -207,7 +210,7 @@ restore(){ for db in "${MYSQL_DB[@]}" do - echo restore database: "$db" "$2" + echo restore database: "$db" from "$2" import_sql "$db" "$2" done fi @@ -215,9 +218,29 @@ restore(){ for dir in "${FOLDERS[@]}" do # die eigentliche Wiederherstellung ... - echo restore file[s]: "${dir}" "$2" + echo restore file[s]: "${dir}" from "$2" r_files "${BACKUP_DIR_FILES}/${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$2" + echo + done + + for vol in "${DOCKER_VOLUME[@]}" + do + # die eigentliche Wiederherstellung ... + echo restore Docker volume: "${vol}" from "$2" + + # herausfinden wo das volume gespeicher ist + if [ dir=$(ssh ${REMOTE_USER}@${REMOTE_HOST} docker volume inspect -f "{{.Mountpoint}}" "$vol") ] + then + echo Volume don\'t exist. + echo Create one: docker volume create "${vol}" + + ssh ${REMOTE_USER}@${REMOTE_HOST} docker volume create "${vol}" + dir=$(ssh ${REMOTE_USER}@${REMOTE_HOST} docker volume inspect -f "{{.Mountpoint}}" "$vol") + fi + + [ "$dir" != "" ] && r_files "${BACKUP_DIR_VOLS}/${vol}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$2" + echo done echo Done restore $1 @@ -236,22 +259,36 @@ list(){ echo Show backups of $1 echo ================================================== - # neue Konfiguration lesen - #source "$CONFIG_DIR/$1" - - if [ ${#MYSQL_DB[@]} -gt 0 ] + if [ ${#MYSQL_DB[@]} -gt 0 ] then - FOLDERS+=("$MYSQL_DUMP_DIR") + echo show backups 'for' MySQL databases: + + if [ "$MYSQL_CONTAINER" != '' ] + then + rdiff-backup -l "$BACKUP_DIR_CONTAINERS/${MYSQL_CONTAINER}" + else + rdiff-backup -l "${BACKUP_DIR_FILES}/${MYSQL_DUMP_DIR}" + fi + + echo fi for dir in "${FOLDERS[@]}" do - echo show backups for file[s]: "$dir" + echo show backups 'for' file[s]: "$dir" rdiff-backup -l "${BACKUP_DIR_FILES}/${dir}" echo done + for vol in "${DOCKER_VOLUME[@]}" + do + echo show backups 'for' volume: "${vol}" + + rdiff-backup -l "${BACKUP_DIR_VOLS}/${vol}" + echo + done + echo Done show $1 echo }