diff --git a/storagebox_alpha_backup.sh b/storagebox_alpha_backup.sh index e4b32e0..5daceaa 100755 --- a/storagebox_alpha_backup.sh +++ b/storagebox_alpha_backup.sh @@ -2,16 +2,22 @@ # Backup Hetzner Storagebox (Alpha) used by VPS for service data. -# USER=thomas -# export HOME=/home/thomas -# export XDG_RUNTIME_DIR=/run/user/1000 -# source /home/thomas/.env - NAS_DEVICE_NAME="Hetzner Storagebox (Alpha)" RCHAT_NOTIFIER="${HOME}/repos/utilities/rocketchat_notifier.sh" SOURCE_MOUNTPOINT="/media/hetzner-storagebox-alpha" LOCAL_MOUNTPOINT="/media/my-passport" +function clean_up() { + # Dismount NAS + echo "INFO Dismounting ${NAS_DEVICE_NAME}." + sudo umount /media/hetzner-storagebox-alpha/ + + # Turn on VPN + echo "INFO Re-connecting Mullvad VPN." + mullvad connect + exit +} + # Turn off VPN echo "INFO Attempting backup of ${NAS_DEVICE_NAME} NAS device." echo "INFO Checking VPN status." @@ -36,7 +42,7 @@ else else $RCHAT_NOTIFIER "backups" "error" \ "Could not complete scheduled backup of ${NAS_DEVICE_NAME}. Local backup disk (/media/my-passport) not mounted." - exit + clean_up fi fi @@ -49,14 +55,14 @@ if mountpoint -q ${SOURCE_MOUNTPOINT}; then else $RCHAT_NOTIFIER "backups" "error" \ "Could not complete scheduled ${NAS_DEVICE_NAME} backup. Source disk (/media/hetzner-storagebox-alpha) not mounted." - exit + clean_up fi # Create backup (ignoring lock files) echo "INFO Beginning backup." -sudo rsync -rtv --progress --delete --no-perms \ +sudo rsync -avzP --delete --no-perms \ --exclude="*.lock" \ --exclude="*.bleve/store/root.bolt" \ --exclude="mongo/db/mongod.lock" \ @@ -75,12 +81,4 @@ else "Failed to create backup of ${NAS_DEVICE_NAME}: problem with rsync (exit code $STATUS)." fi -# Dismount NAS -echo "INFO Dismounting ${NAS_DEVICE_NAME}." -sudo umount /media/hetzner-storagebox-alpha/ - -# Turn on VPN -echo "INFO Re-connecting Mullvad VPN." -mullvad connect - -exit +clean_up diff --git a/vps_mysql_backup.sh b/vps_mysql_backup.sh new file mode 100755 index 0000000..9989df5 --- /dev/null +++ b/vps_mysql_backup.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Backup MYSQL dir on VPS + +RCHAT_NOTIFIER="${HOME}/repos/utilities/rocketchat_notifier.sh" + +TARGET_NAME="VPS: /data/mysql" +LOCAL_DISK_MOUNTPOINT="/media/my-passport" +LOCAL_DIR="${LOCAL_DISK_MOUNTPOINT}/vps_backups/mysql" + +# function clean_up() { +# # Dismount NAS +# echo "INFO Dismounting ${NAS_DEVICE_NAME}." +# sudo umount /media/hetzner-storagebox-alpha/ + +# # Turn on VPN +# echo "INFO Re-connecting Mullvad VPN." +# mullvad connect +# exit +# } + +# Check source disk is mounted +if mountpoint -q ${LOCAL_DISK_MOUNTPOINT}; then + echo "INFO Local disk /media/my-passport mounted. Proceeding." +else + echo "INFO Local disk not mounted. Mounting /media/my-passport." + sudo mount ${LOCAL_DISK_MOUNTPOINT} + if mountpoint -q ${LOCAL_MOUNTPOINT}; then + echo "INFO Mounted /media/my-passport" + else + $RCHAT_NOTIFIER "backups" "error" \ + "Could not complete scheduled backup of ${TARGET_NAME}. Local backup disk (/media/my-passport) not mounted." + clean_up + fi +fi + +rsync -avzP --delete \ + thomas@systemsobcure.net:/data/mysql "${LOCAL_DIR}" + +STATUS=$? +if [ $STATUS -eq 0 ]; then + $RCHAT_NOTIFIER "backups" "success" \ + "Created backup of ${TARGET_NAME}." + # 23 = partial backup, 24 = some vanished files, both != major failure +elif [ $STATUS -eq 23 ] || [ $STATUS -eq 24 ]; then + $RCHAT_NOTIFIER "backups" "success" \ + "Created backup of ${TARGET_NAME}. A few files could not be copied." +else + $RCHAT_NOTIFIER "backups" "error" \ + "Failed to create backup of ${TARGET_NAME}: problem with rsync (exit code $STATUS)." +fi