From ba246d34cb3dbb5f6906d59039b0adf2c7d238ec Mon Sep 17 00:00:00 2001 From: andryyy Date: Sat, 28 Mar 2020 19:50:15 +0100 Subject: [PATCH] [Helper] Some minor improvements --- helper-scripts/backup_and_restore.sh | 71 +++++++++++++++++++++------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/helper-scripts/backup_and_restore.sh b/helper-scripts/backup_and_restore.sh index 707cd131..5f9e863c 100755 --- a/helper-scripts/backup_and_restore.sh +++ b/helper-scripts/backup_and_restore.sh @@ -45,13 +45,28 @@ else exit 1 fi fi + BACKUP_LOCATION=$(echo ${BACKUP_LOCATION} | sed 's#/$##') SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" COMPOSE_FILE=${SCRIPT_DIR}/../docker-compose.yml + +if [ ! -f ${COMPOSE_FILE} ]; then + echo "Compose file not found" + exit 1 +fi + echo "Using ${BACKUP_LOCATION} as backup/restore location." echo + source ${SCRIPT_DIR}/../mailcow.conf -CMPS_PRJ=$(echo $COMPOSE_PROJECT_NAME | tr -cd "[A-Za-z-_]") + +if [[ -z ${COMPOSE_PROJECT_NAME} ]]; then + echo "Could not determine compose project name" + exit 1 +else + echo "Found project name ${COMPOSE_PROJECT_NAME}" + CMPS_PRJ=$(echo ${COMPOSE_PROJECT_NAME} | tr -cd "[A-Za-z-_]") +fi function backup() { DATE=$(date +"%Y-%m-%d-%H-%M-%S") @@ -93,18 +108,24 @@ function backup() { ;;& mysql|all) SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE}) - docker run --rm \ - --network $(docker network ls -qf name=${CMPS_PRJ}_) \ - -v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:ro \ - --entrypoint= \ - -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \ - ${SQLIMAGE} /bin/sh -c "mariabackup --host mysql --user root --password ${DBROOT} --backup --rsync --target-dir=/backup" - - docker run --rm \ - --network $(docker network ls -qf name=${CMPS_PRJ}_) \ - --entrypoint= \ - -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \ - ${SQLIMAGE} /bin/sh -c "mariabackup --prepare --target-dir=/backup" + if [[ -z "${SQLIMAGE}" ]]; then + echo "Could not determine SQL image version, skipping backup..." + shift + continue + else + echo "Using SQL image ${SQLIMAGE}, starting..." + docker run --rm \ + --network $(docker network ls -qf name=${CMPS_PRJ}_) \ + -v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:ro \ + --entrypoint= \ + -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \ + ${SQLIMAGE} /bin/sh -c "mariabackup --host mysql --user root --password ${DBROOT} --backup --rsync --target-dir=/backup" + docker run --rm \ + --network $(docker network ls -qf name=${CMPS_PRJ}_) \ + --entrypoint= \ + -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \ + ${SQLIMAGE} /bin/sh -c "mariabackup --prepare --target-dir=/backup" + fi ;;& --delete-days) shift @@ -120,7 +141,10 @@ function backup() { } function restore() { + echo + echo "Stopping watchdog-mailcow..." docker stop $(docker ps -qf name=watchdog-mailcow) + echo RESTORE_LOCATION="${1}" shift while (( "$#" )); do @@ -178,10 +202,18 @@ function restore() { ;; mysql) SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE}) - docker stop $(docker ps -qf name=mysql-mailcow) + read -p "mailcow will be stopped and the corresponding mailcow.conf file of the backup will be restored, do you want to proceed? [y|N] " MYSQL_STOP_MAILCOW + if [[ ${MYSQL_STOP_MAILCOW,,} =~ ^(yes|y)$ ]]; then + echo "Stopping mailcow..." + docker-compose down + else + echo "OK, skipped." + shift + continue + fi + #docker stop $(docker ps -qf name=mysql-mailcow) if [[ -d "${RESTORE_LOCATION}/mysql" ]]; then docker run --rm \ - --network $(docker network ls -qf name=${CMPS_PRJ}_) \ -v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:rw \ --entrypoint= \ -v ${RESTORE_LOCATION}/mysql:/backup \ @@ -199,11 +231,18 @@ function restore() { gunzip < backup/backup_mysql.gz | mysql -uroot && \ mysql -uroot -e SHUTDOWN;" fi - docker start $(docker ps -aqf name=mysql-mailcow) + echo "Copying mailcow.conf..." + mv mailcow.conf mailcow.conf_backup_$(date +"%Y-%m-%d-%H-%M-%S") + cp ${RESTORE_LOCATION}/mailcow.conf mailcow.conf + echo "Starting mailcow..." + docker-compose up -d + #docker start $(docker ps -aqf name=mysql-mailcow) ;; esac shift done + echo + echo "Starting watchdog-mailcow..." docker start $(docker ps -aqf name=watchdog-mailcow) }