workouttest_backoffice/backup_aitrainer.sh
Tibor Bossanyi (Freelancer) a18112cf5e BO 1.34
2021-12-01 00:24:31 +01:00

79 lines
2.7 KiB
Bash

if [[ ! -z ${MAILCOW_BACKUP_LOCATION} ]]; then
BACKUP_LOCATION="${MAILCOW_BACKUP_LOCATION}"
fi
if [[ -z ${BACKUP_LOCATION} ]]; then
while [[ -z ${BACKUP_LOCATION} ]]; do
read -ep "Backup location (absolute path, starting with /): " BACKUP_LOCATION
done
fi
if [[ ! ${1} =~ (backup|restore) ]]; then
echo "First parameter needs to be 'backup' or 'restore'"
exit 1
fi
if [[ ${1} == "backup" && ! ${2} =~ (aitrainer|all|--delete-days) ]]; then
echo "Second parameter needs to be 'aitrainer', 'all' or '--delete-days'"
exit 1
fi
BACKUP_LOCATION=$(echo ${BACKUP_LOCATION} | sed 's#/$##')
SCRIPT_DIR=/home/bosi/backoffice/aitrainer_backoffice
COMPOSE_FILE=${SCRIPT_DIR}/docker-compose.yml
ENV_FILE=${SCRIPT_DIR}/.env
if [ ! -f ${COMPOSE_FILE} ]; then
echo "Compose file not found"
exit 1
fi
echo "Using ${BACKUP_LOCATION} as backup/restore location."
echo
function backup() {
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
CMPS_PRJ=aitrainer_backoffice
mkdir -p "${BACKUP_LOCATION}/aitrainer-${DATE}"
chmod 755 "${BACKUP_LOCATION}/aitrainer-${DATE}"
#cp "${SCRIPT_DIR}/../mailcow.conf" "${BACKUP_LOCATION}/mailcow-${DATE}"
while (( "$#" )); do
case "$1" in
gitlab|all)
docker exec -t <container name> gitlab-backup create
aitrainer_db|all)
SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE})
if [[ -z "${SQLIMAGE}" ]]; then
echo "Could not determine SQL image version, skipping backup..."
shift
continue
else
echo "Using SQL image ${SQLIMAGE}, starting..."
docker exec aitrainer-backup sh -c 'exec mysqldump --all-databases -uroot -p${MYSQL_ROOT_PASSWORD}' > ${BACKUP_LOCATION}/all-databases.sql
docker run --name aitrainer-backup --rm \
#-v $(docker volume ls -qf name=^aitrainer_backoffice_mysql-vol-1$):/var/lib/mysql/:ro,z \
#-t --entrypoint= \
#--sysctl net.ipv6.conf.all.disable_ipv6=1 \
-v ${BACKUP_LOCATION}/aitrainer-${DATE}:/backup:z \
${SQLIMAGE} /bin/sh -c "mysqldump --host mysql-server --user root --password ${MYSQL_ROOT_PASSWORD} --backup --rsync --target-dir=/backup_mysql ; \
mysqldump --prepare --target-dir=/backup_mysql ; \
chown -R 999:999 /backup_mysql ; \
/bin/tar --warning='no-file-ignored' --use-compress-program='gzip --rsyncable' -Pcvpf /backup/backup_mysql.tar.gz /backup_mysql ;"
;;&
fi
--delete-days)
shift
if [[ "${1}" =~ ^[0-9]+$ ]]; then
find ${BACKUP_LOCATION}/aitrainer-* -maxdepth 0 -mmin +$((${1}*60*24)) -exec rm -rvf {} \;
else
echo "Parameter of --delete-days is not a number."
fi
;;
esac
shift
done
}
if [[ ${1} == "backup" ]]; then
backup ${@,,}
fi