Skip to content
Snippets Groups Projects
Commit 8ff9a050 authored by Jerome Coste's avatar Jerome Coste
Browse files

Merge branch 'unified_backup' into 'master'

Unified backup

See merge request picasoft/dockerfiles!6
parents 1048b4dc 8b806dd5
No related branches found
No related tags found
1 merge request!6Unified backup
......@@ -20,60 +20,60 @@ MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
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 "=> Creating backup script"
echo "=> ${MYSQL_SERVICE_NAME}: Creating backup script"
rm -f "/$backup_script_name"
cat <<EOF >> "/$backup_script_name"
#!/bin/bash
MAX_BACKUPS=${MAX_BACKUPS}
BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
echo "=> Backup started: \${BACKUP_NAME}"
echo "=> ${MYSQL_SERVICE_NAME}: Backup started: \${BACKUP_NAME}"
if ${BACKUP_CMD} ;then
echo " Backup succeeded"
echo "${MYSQL_SERVICE_NAME}: Backup succeeded"
else
echo " Backup failed"
echo "${MYSQL_SERVICE_NAME}: Backup failed"
rm -rf ${BACKUP_FOLDER}\${BACKUP_NAME}
fi
if [ -n "\${MAX_BACKUPS}" ]; then
while [ \$(ls $BACKUP_FOLDER -N1 | wc -l) -gt \${MAX_BACKUPS} ];
do
BACKUP_TO_BE_DELETED=\$(ls $BACKUP_FOLDER -N1 | sort | head -n 1)
echo " Backup \${BACKUP_TO_BE_DELETED} is deleted"
rm -rf ${BACKUP_FOLDER}\${BACKUP_TO_BE_DELETED}
done
fi
echo "=> Backup done"
EOF
chmod +x /$backup_script_name
###########################
# CREATING RESTORE SCRIPT #
###########################
restore_script_name="${MYSQL_SERVICE_NAME}-restore.sh"
backup_log="${MYSQL_SERVICE_NAME}_mysql_backup.log"
echo "=> Creating restore script"
rm -f /$restore_script_name
echo "=> ${MYSQL_SERVICE_NAME}: Creating restore script"
rm -f "/$restore_script_name"
cat <<EOF >> /$restore_script_name
#!/bin/bash
echo "=> Restore database from \$1"
echo "=> ${MYSQL_SERVICE_NAME}: Restore database from \$1"
if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$1 ;then
echo " Restore succeeded"
echo "${MYSQL_SERVICE_NAME}: Restore succeeded"
else
echo " Restore failed"
echo "${MYSQL_SERVICE_NAME}: Restore failed"
fi
echo "=> Done"
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 "=> Create a backup on the startup"
echo "=> ${MYSQL_SERVICE_NAME}: Create a backup on the startup"
/${backup_script_name}
elif [ -n "${INIT_RESTORE_LATEST}" ]; then
echo "=> Restore latest backup"
echo "=> ${MYSQL_SERVICE_NAME}: Restore latest backup"
until nc -z $MYSQL_HOST $MYSQL_PORT
do
echo "waiting database container..."
......@@ -82,6 +82,9 @@ elif [ -n "${INIT_RESTORE_LATEST}" ]; then
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 "=> Running cron job"
echo "=> ${MYSQL_SERVICE_NAME}: Running cron job"
......@@ -10,13 +10,16 @@ BACKUP_FOLDER=${BACKUP_FOLDER:-"/backup/"}
BACKUP_CMD="pg_dump -w -c > $BACKUP_FOLDER"'${BACKUP_NAME}'
##########################
# CREATING BACKUP SCRIPT #
##########################
backup_script_name="${POSTGRES_SERVICE_NAME}-backup.sh"
echo "=> Creating backup script"
echo "=> ${POSTGRES_SERVICE_NAME}: Creating backup script"
rm -f "/$backup_script_name"
cat <<EOF >> "/$backup_script_name"
#!/bin/bash
MAX_BACKUPS=${MAX_BACKUPS}
export PGHOST=$POSTGRES_HOST
export PGPORT=$POSTGRES_PORT
export PGDATABASE=$POSTGRES_DB
......@@ -25,29 +28,23 @@ export PGPASSWORD=$POSTGRES_PASS
BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
echo "=> Backup started: \${BACKUP_NAME}"
echo "=> ${POSTGRES_SERVICE_NAME}: Backup started: \${BACKUP_NAME}"
if ${BACKUP_CMD} ;then
echo " Backup succeeded"
echo "${POSTGRES_SERVICE_NAME}: Backup succeeded"
else
echo " Backup failed"
echo "${POSTGRES_SERVICE_NAME}: Backup failed"
rm -rf $BACKUP_FOLDER\${BACKUP_NAME}
fi
if [ -n "\${MAX_BACKUPS}" ]; then
while [ \$(ls $BACKUP_FOLDER -N1 | wc -l) -gt \${MAX_BACKUPS} ];
do
BACKUP_TO_BE_DELETED=\$(ls $BACKUP_FOLDER -N1 | sort | head -n 1)
echo " Backup \${BACKUP_TO_BE_DELETED} is deleted"
rm -rf ${BACKUP_FOLDER}\${BACKUP_TO_BE_DELETED}
done
fi
echo "=> Backup done"
EOF
chmod +x /$backup_script_name
###########################
# CREATING RESTORE SCRIPT #
###########################
restore_script_name="${POSTGRES_SERVICE_NAME}-restore.sh"
backup_log="${POSTGRES_SERVICE_NAME}_postgres_backup.log"
echo "=> Creating restore script"
echo "=> ${POSTGRES_SERVICE_NAME}: Creating restore script"
rm -f "/$restore_script_name"
cat <<EOF >> /$restore_script_name
......@@ -58,13 +55,12 @@ export PGDATABASE=$POSTGRES_DB
export PGUSER=$POSTGRES_USER
export PGPASSWORD=$POSTGRES_PASS
echo "=> Restore database from \$1"
if pg_restore -w -d $POSTGRES_DB < \$1 ;then
echo " Restore succeeded"
echo "=> ${POSTGRES_SERVICE_NAME}: Restore database from \$1"
if psql < \$1 ;then
echo "${POSTGRES_SERVICE_NAME}: Restore succeeded"
else
echo " Restore failed"
echo "${POSTGRES_SERVICE_NAME}: Restore failed"
fi
echo "=> Done"
EOF
chmod +x /$restore_script_name
......@@ -72,10 +68,10 @@ touch /$backup_log
tail -F /$backup_log &
if [ -n "${INIT_BACKUP}" ]; then
echo "=> Create a backup on the startup"
echo "=> ${POSTGRES_SERVICE_NAME}: Create a backup on the startup"
/$backup_script_name
elif [ -n "${INIT_RESTORE_LATEST}" ]; then
echo "=> Restore latest backup"
echo "=> ${POSTGRES_SERVICE_NAME}: Restore latest backup"
until nc -z $POSTGRES_HOST $POSTGRES_PORT
do
echo "waiting database container..."
......@@ -86,5 +82,4 @@ fi
echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
crontab /crontab.conf
echo "=> Running cron job"
echo "=> ${POSTGRES_SERVICE_NAME}: Running cron job"
......@@ -9,7 +9,6 @@
# MYSQL_USER_LIST POSTGRES_USER_LIST
# MYSQL_PASS_LIST POSTGRES_PASS_LIST
# MYSQL_DB_LIST POSTGRES_DB_LIST
# MYSQL_MAX_BACKUP_LIST POSTGRES_MAX_BACKUP_LIST
# MYSQL_INIT_BACKUP_LIST POSTGRES_INIT_BACKUP_LIST
# MYSQL_CRON_TIME_LIST POSTGRES_CRON_TIME_LIST
# MYSQL_EXTRA_OPTS_LIST POSTGRES_EXTRA_OPTS-LIST
......@@ -27,7 +26,6 @@ read -a MYSQL_PORT_ARRAY <<< "$MYSQL_PORT_LIST"
read -a MYSQL_USER_ARRAY <<< "$MYSQL_USER_LIST"
read -a MYSQL_PASS_ARRAY <<< "$MYSQL_PASS_LIST"
read -a MYSQL_DB_ARRAY <<< "$MYSQL_DB_LIST"
read -a MYSQL_MAX_BACKUPS_ARRAY <<< "$MYSQL_MAX_BACKUPS_LIST"
read -a MYSQL_INIT_BACKUP_ARRAY <<< "$MYSQL_INIT_BACKUP_LIST"
read -a MYSQL_CRON_TIME_ARRAY <<< "$MYSQL_CRON_TIME_LIST"
read -a MYSQL_EXTRA_OPTS_ARRAY <<< "$MYSQL_EXTRA_OPTS_LIST"
......@@ -40,7 +38,6 @@ read -a POSTGRES_PORT_ARRAY <<< "$POSTGRES_PORT_LIST"
read -a POSTGRES_USER_ARRAY <<< "$POSTGRES_USER_LIST"
read -a POSTGRES_PASS_ARRAY <<< "$POSTGRES_PASS_LIST"
read -a POSTGRES_DB_ARRAY <<< "$POSTGRES_DB_LIST"
read -a POSTGRES_MAX_BACKUPS_ARRAY <<< "$POSTGRES_MAX_BACKUPS_LIST"
read -a POSTGRES_INIT_BACKUP_ARRAY <<< "$POSTGRES_INIT_BACKUP_LIST"
read -a POSTGRES_CRON_TIME_ARRAY <<< "$POSTGRES_CRON_TIME_LIST"
read -a POSTGRES_EXTRA_OPTS_ARRAY <<< "$POSTGRES_EXTRA_OPTS_LIST"
......@@ -63,7 +60,6 @@ do
MYSQL_USER=${MYSQL_USER_ARRAY[i]} \
MYSQL_PASS=${MYSQL_PASS_ARRAY[i]} \
MYSQL_DB=${MYSQL_DB_ARRAY[i]} \
MAX_BACKUPS=${MYSQL_MAX_BACKUPS_ARRAY[i]} \
INIT_BACKUP=${MYSQL_INIT_BACKUP_ARRAY[i]} \
CRON_TIME=${MYSQL_CRON_TIME_ARRAY[i]} \
EXTRA_OPTS=${MYSQL_EXTRA_OPTS_ARRAY[i]} \
......@@ -82,7 +78,6 @@ do
POSTGRES_USER=${POSTGRES_USER_ARRAY[i]} \
POSTGRES_PASS=${POSTGRES_PASS_ARRAY[i]} \
POSTGRES_DB=${POSTGRES_DB_ARRAY[i]} \
MAX_BACKUPS=${POSTGRES_MAX_BACKUP_ARRAY[i]} \
INIT_BACKUP=${POSTGRES_INIT_BACKUP_ARRAY[i]} \
CRON_TIME=${POSTGRES_CRON_TIME_ARRAY[i]} \
EXTRA_OPTS=${POSTGRES_EXTRA_OPTS_ARRAY[i]} \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment