-
Quentin Duchemin authored
Allows to switch a service from a machine to another without having to reconfigure backups. Very useful for migrations for example.
Quentin Duchemin authoredAllows to switch a service from a machine to another without having to reconfigure backups. Very useful for migrations for example.
mysql-run.sh 3.14 KiB
#!/usr/bin/env bash
if [ "${MYSQL_ENV_MYSQL_PASS}" == "**Random**" ]; then
unset MYSQL_ENV_MYSQL_PASS
fi
BACKUP_FOLDER=${BACKUP_FOLDER:-"/backup/"}
MYSQL_HOST=${MYSQL_PORT_3306_TCP_ADDR:-${MYSQL_HOST}}
MYSQL_HOST=${MYSQL_PORT_1_3306_TCP_ADDR:-${MYSQL_HOST}}
MYSQL_PORT=${MYSQL_PORT_3306_TCP_PORT:-${MYSQL_PORT}}
MYSQL_PORT=${MYSQL_PORT_1_3306_TCP_PORT:-${MYSQL_PORT}}
MYSQL_USER=${MYSQL_USER:-${MYSQL_ENV_MYSQL_USER}}
MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
[ -z "${MYSQL_HOST}" ] && { echo "=> MYSQL_HOST cannot be empty" && exit 1; }
[ -z "${MYSQL_PORT}" ] && { echo "=> MYSQL_PORT cannot be empty" && exit 1; }
[ -z "${MYSQL_USER}" ] && { echo "=> MYSQL_USER cannot be empty" && exit 1; }
[ -z "${MYSQL_PASS}" ] && { echo "=> MYSQL_PASS cannot be empty" && exit 1; }
ping -c 1 -W 1 "${MYSQL_HOST}" || echo "${MYSQL_HOST} not available, skipping backup..."; exit 1
BACKUP_CMD="mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} ${EXTRA_OPTS} ${MYSQL_DB} > $BACKUP_FOLDER"'${BACKUP_NAME}'
##########################
# CREATING BACKUP SCRIPT #
##########################
backup_script_name="${MYSQL_SERVICE_NAME}-backup.sh"
echo "=> ${MYSQL_SERVICE_NAME}: Creating backup script"
rm -f "/$backup_script_name"
cat <<EOF >> "/$backup_script_name"
#!/bin/bash
DATE=\$(date +\%Y.\%m.\%d.\%H\%M\%S)
BACKUP_NAME=\$DATE.sql
echo "=> ${MYSQL_SERVICE_NAME}: Backup started: \${BACKUP_NAME}"
if ${BACKUP_CMD} ;then
echo " => Compress files $BACKUP_FOLDER\$DATE.tar.gz"
tar -czvf $BACKUP_FOLDER\$DATE.tar.gz $BACKUP_FOLDER\${BACKUP_NAME} && \
rm -rf $BACKUP_FOLDER\$BACKUP_NAME && \
echo "${MYSQL_SERVICE_NAME}: Backup succeeded"
else
echo "${MYSQL_SERVICE_NAME}: Backup failed"
rm -rf ${BACKUP_FOLDER}\${BACKUP_NAME}
fi
EOF
chmod +x /$backup_script_name
###########################
# CREATING RESTORE SCRIPT #
###########################
restore_script_name="${MYSQL_SERVICE_NAME}-restore.sh"
echo "=> ${MYSQL_SERVICE_NAME}: Creating restore script"
rm -f "/$restore_script_name"
cat <<EOF >> /$restore_script_name
#!/bin/bash
echo "=> ${MYSQL_SERVICE_NAME}: Restore database from \$1"
tar -xzvf \$1
output="\$(echo \$1 | awk -F'.tar.gz' '{print \$1".sql"}')"
if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$output ;then
echo "${MYSQL_SERVICE_NAME}: Restore succeeded"
else
echo "${MYSQL_SERVICE_NAME}: Restore failed"
fi
rm -Rf \$output
EOF
chmod +x /$restore_script_name
backup_log="${MYSQL_SERVICE_NAME}_mysql_backup.log"
touch /$backup_log
tail -F /$backup_log &
if [ -n "${INIT_BACKUP}" ]; then
echo "=> ${MYSQL_SERVICE_NAME}: Create a backup on the startup"
/${backup_script_name}
elif [ -n "${INIT_RESTORE_LATEST}" ]; then
echo "=> ${MYSQL_SERVICE_NAME}: Restore latest backup"
until nc -z $MYSQL_HOST $MYSQL_PORT
do
echo "waiting database container..."
sleep 1
done
ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /$restore_script_name
fi
#####################
# SET THE CRON RULE #
#####################
echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
crontab /crontab.conf
echo "=> ${MYSQL_SERVICE_NAME}: Running cron job"