Skip to content
Snippets Groups Projects
Commit 294aa7a2 authored by Alexandre-Guillaume Gilbert's avatar Alexandre-Guillaume Gilbert
Browse files

Rename pica-backupv2 to db-backup

parent 0d70d78b
No related branches found
No related tags found
1 merge request!7[TX-INFRA-P18] Add images for pica-backupv2 and backup-rotation
File moved
File moved
File moved
File moved
File moved
File moved
FROM registry.picasoft.net:5000/pica-debian
RUN apt-get update && \
apt-get install -y --no-install-recommends \
postgresql-client \
mysql-client \
mongodb-clients \
mongo-tools \
cron && \
apt-get clean \
mkdir /scripts/{mysql,postgresql}
COPY mysql-run.sh /scripts/mysql/mysql-run.sh
COPY postgres-run.sh /scripts/postgresql/postgres-run.sh
COPY mongo-run.sh /scripts/mongodb/mongo-run.sh
COPY run.sh /scripts
ENV CRON_TIME="0 0 * * *"
VOLUME ["/backup"]
CMD ["/scripts/run.sh"]
version: "2"
services:
backup:
image: backup
container_name: test-backup
volumes:
- /home/user/Documents/Picasoft/dockerfiles/pica-backup/t1:/backup/test-backup1
- /home/user/Documents/Picasoft/dockerfiles/pica-backup/t2:/backup/test-backup2
environment:
- TEST=aaaaa,bbbbbbb,ccccc
../mysql-backup/
\ No newline at end of file
../postgres-backup/
\ No newline at end of file
#!/bin/bash
# Antoine Barbare 18/02/18 <antoine@barbare.me>
BACKUP_FOLDER=${BACKUP_FOLDER:-"/backup/"}
[ -z "${MONGO_HOST}" ] && { echo "=> MONGO_HOST cannot be empty" && exit 1; }
[ -z "${MONGO_PORT}" ] && { echo "=> MONGO_PORT cannot be empty" && exit 1; }
[ -z "${MONGO_DB}" ] && { echo "=> MONGO_DB cannot be empty" && exit 1; }
if [[ -z "${MONGO_USER}" && -z "${MONGO_PASS}" ]]; then
BACKUP_CMD="mongodump -d ${MONGO_DB} -h ${MONGO_HOST}:${MONGO_PORT} -o $BACKUP_FOLDER"'${BACKUP_NAME}'
RESTORE_CMD="mongorestore -d ${MONGO_DB} -h ${MONGO_HOST}:${MONGO_PORT} "
else
BACKUP_CMD="mongodump -d ${MONGO_DB} -h ${MONGO_HOST}:${MONGO_PORT} -u ${MONGO_USER} -p ${MONGO_PASS} -o $BACKUP_FOLDER"'${BACKUP_NAME}'
RESTORE_CMD="mongorestore -d ${MONGO_DB} -h ${MONGO_HOST}:${MONGO_PORT} -u ${MONGO_USER} -p ${MONGO_PASS} "
fi
##########################
# CREATING BACKUP SCRIPT #
##########################
backup_script_name="${MONGO_SERVICE_NAME}-backup.sh"
echo "=> ${MONGO_SERVICE_NAME}: Creating backup script"
rm -f "/$backup_script_name"
cat <<EOF >> "/$backup_script_name"
#!/bin/bash
BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S)
echo "=> ${MONGO_SERVICE_NAME}: Backup started: \${BACKUP_NAME}"
if ${BACKUP_CMD} ;then
MONGO_BACKUP=$BACKUP_FOLDER\${BACKUP_NAME}
echo " => Compress files \$MONGO_BACKUP.tar.gz"
tar -czvf \$MONGO_BACKUP.tar.gz \$MONGO_BACKUP && \
rm -rf \$MONGO_BACKUP && \
echo "${MONGO_SERVICE_NAME}: Backup succeeded"
else
echo "${MONGO_SERVICE_NAME}: Backup failed"
rm -rf $BACKUP_FOLDER\${BACKUP_NAME}
fi
EOF
chmod +x /$backup_script_name
###########################
# CREATING RESTORE SCRIPT #
###########################
restore_script_name="${MONGO_SERVICE_NAME}-restore.sh"
backup_log="${MONGO_SERVICE_NAME}_mongo_backup.log"
echo "=> ${MONGO_SERVICE_NAME}: Creating restore script"
rm -f "/$restore_script_name"
cat <<EOF >> /$restore_script_name
#!/bin/bash
echo "=> ${MONGO_SERVICE_NAME}: Restore database from \$1"
echo " => Uncompress save \$1"
tar -xzvf \$1
output="\$(echo \$1 | awk -F'.tar.gz' '{print \$1}')"
if mongorestore -d ${MONGO_SERVICE_NAME} -h ${MONGO_HOST}:${MONGO_PORT} \$output;then
echo "${MONGO_SERVICE_NAME}: Restore succeeded"
else
echo "${MONGO_SERVICE_NAME}: Restore failed"
fi
rm -Rf \$output
EOF
chmod +x /$restore_script_name
touch /$backup_log
tail -F /$backup_log &
if [ -n "${INIT_BACKUP}" ]; then
echo "=> ${MONGO_SERVICE_NAME}: Create a backup on the startup"
/$backup_script_name
elif [ -n "${INIT_RESTORE_LATEST}" ]; then
echo "=> ${MONGO_SERVICE_NAME}: Restore latest backup"
until nc -z $MONGO_HOST $MONGO_PORT
do
echo "waiting database container..."
sleep 1
done
ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /$restore_script_name
fi
echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
crontab /crontab.conf
echo "=> ${MONGO_SERVICE_NAME}: Running cron job"
#!/bin/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; }
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"
#!/bin/bash
BACKUP_FOLDER=${BACKUP_FOLDER:-"/backup/"}
[ -z "${POSTGRES_HOST}" ] && { echo "=> POSTGRES_HOST cannot be empty" && exit 1; }
[ -z "${POSTGRES_PORT}" ] && { echo "=> POSTGRES_PORT cannot be empty" && exit 1; }
[ -z "${POSTGRES_USER}" ] && { echo "=> POSTGRES_USER cannot be empty" && exit 1; }
[ -z "${POSTGRES_PASS}" ] && { echo "=> POSTGRES_PASS cannot be empty" && exit 1; }
[ -z "${POSTGRES_DB}" ] && { echo "=> POSTGRES_DB cannot be empty" && exit 1; }
BACKUP_CMD="pg_dump -w -c > $BACKUP_FOLDER"'${BACKUP_NAME}'
##########################
# CREATING BACKUP SCRIPT #
##########################
backup_script_name="${POSTGRES_SERVICE_NAME}-backup.sh"
echo "=> ${POSTGRES_SERVICE_NAME}: Creating backup script"
rm -f "/$backup_script_name"
cat <<EOF >> "/$backup_script_name"
#!/bin/bash
export PGHOST=$POSTGRES_HOST
export PGPORT=$POSTGRES_PORT
export PGDATABASE=$POSTGRES_DB
export PGUSER=$POSTGRES_USER
export PGPASSWORD=$POSTGRES_PASS
DATE=\$(date +\%Y.\%m.\%d.\%H\%M\%S)
BACKUP_NAME=\$DATE.sql
echo "=> ${POSTGRES_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 "${POSTGRES_SERVICE_NAME}: Backup succeeded"
else
echo "${POSTGRES_SERVICE_NAME}: Backup failed"
rm -rf $BACKUP_FOLDER\${BACKUP_NAME}
fi
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 "=> ${POSTGRES_SERVICE_NAME}: Creating restore script"
rm -f "/$restore_script_name"
cat <<EOF >> /$restore_script_name
#!/bin/bash
export PGHOST=$POSTGRES_HOST
export PGPORT=$POSTGRES_PORT
export PGDATABASE=$POSTGRES_DB
export PGUSER=$POSTGRES_USER
export PGPASSWORD=$POSTGRES_PASS
echo "=> ${POSTGRES_SERVICE_NAME}: Restore database from \$1"
tar -xzvf \$1
output="\$(echo \$1 | awk -F'.tar.gz' '{print \$1".sql"}')"
if psql < \$output ;then
echo "${POSTGRES_SERVICE_NAME}: Restore succeeded"
else
echo "${POSTGRES_SERVICE_NAME}: Restore failed"
fi
rm -Rf \$output
EOF
chmod +x /$restore_script_name
touch /$backup_log
tail -F /$backup_log &
if [ -n "${INIT_BACKUP}" ]; then
echo "=> ${POSTGRES_SERVICE_NAME}: Create a backup on the startup"
/$backup_script_name
elif [ -n "${INIT_RESTORE_LATEST}" ]; then
echo "=> ${POSTGRES_SERVICE_NAME}: Restore latest backup"
until nc -z $POSTGRES_HOST $POSTGRES_PORT
do
echo "waiting database container..."
sleep 1
done
ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /$restore_script_name
fi
echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
crontab /crontab.conf
echo "=> ${POSTGRES_SERVICE_NAME}: Running cron job"
#!/bin/bash
# DB_TYPE : MYSQL|POSTGRES
# MYSQL POSTGRESQL MONGODB
# MYSQL_SERVICE_NAME_LIST POSTGRES_SERVICE_NAME_LIST MONGO_SERVICE_NAME_LIST
# MYSQL_HOST_LIST POSTGRES_HOST_LIST MONGO_HOST_LIST
# MYSQL_PORT_LIST POSTGRES_PORT_LIST MONGO_PORT_LIST
# MYSQL_USER_LIST POSTGRES_USER_LIST MONGO_USER_LIST
# MYSQL_PASS_LIST POSTGRES_PASS_LIST MONGO_PASS_LIST
# MYSQL_DB_LIST POSTGRES_DB_LIST MONGO_DB_LIST
# MYSQL_INIT_BACKUP_LIST POSTGRES_INIT_BACKUP_LIST MONGO_INIT_BACKUP_LIST
# MYSQL_CRON_TIME_LIST POSTGRES_CRON_TIME_LIST MONGO_CRON_TIME_LIST
# MYSQL_EXTRA_OPTS_LIST POSTGRES_EXTRA_OPTS-LIST MONGO_BACKUP_FOLDER_LIST
# MYSQL_BACKUP_FOLDER_LIST POSTGRESQL_BACKUP_FOLDER_LIST
#####################
# Create the arrays #
#####################
IFS=,
#MYSQL
read -a MYSQL_HOST_ARRAY <<< "$MYSQL_HOST_LIST"
read -a MYSQL_SERVICE_NAME_ARRAY <<< "$MYSQL_SERVICE_NAME_LIST"
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_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"
read -a MYSQL_BACKUP_FOLDER_ARRAY <<< "$MYSQL_BACKUP_FOLDER_LIST"
#POSTGRES
read -a POSTGRES_HOST_ARRAY <<< "$POSTGRES_HOST_LIST"
read -a POSTGRES_SERVICE_NAME_ARRAY <<< "$POSTGRES_SERVICE_NAME_LIST"
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_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"
read -a POSTGRES_BACKUP_FOLDER_ARRAY <<< "$POSTGRES_BACKUP_FOLDER_LIST"
#MONGO
read -a MONGO_HOST_ARRAY <<< "$MONGO_HOST_LIST"
read -a MONGO_SERVICE_NAME_ARRAY <<< "$MONGO_SERVICE_NAME_LIST"
read -a MONGO_PORT_ARRAY <<< "$MONGO_PORT_LIST"
read -a MONGO_USER_ARRAY <<< "$MONGO_USER_LIST"
read -a MONGO_PASS_ARRAY <<< "$MONGO_PASS_LIST"
read -a MONGO_DB_ARRAY <<< "$MONGO_DB_LIST"
read -a MONGO_INIT_BACKUP_ARRAY <<< "$MONGO_INIT_BACKUP_LIST"
read -a MONGO_CRON_TIME_ARRAY <<< "$MONGO_CRON_TIME_LIST"
read -a MONGO_BACKUP_FOLDER_ARRAY <<< "$MONGO_BACKUP_FOLDER_LIST"
###########################
# Call the backup scripts #
###########################
# Define the scripts location
#Execute MySQL backups
NB_CALLS=${#MYSQL_HOST_ARRAY[@]}
for (( i=0; i < $NB_CALLS; i++ ))
do
MYSQL_SERVICE_NAME=${MYSQL_SERVICE_NAME_ARRAY[i]} \
MYSQL_HOST=${MYSQL_HOST_ARRAY[i]} \
MYSQL_PORT=${MYSQL_PORT_ARRAY[i]} \
MYSQL_USER=${MYSQL_USER_ARRAY[i]} \
MYSQL_PASS=${MYSQL_PASS_ARRAY[i]} \
MYSQL_DB=${MYSQL_DB_ARRAY[i]} \
INIT_BACKUP=${MYSQL_INIT_BACKUP_ARRAY[i]} \
CRON_TIME=${MYSQL_CRON_TIME_ARRAY[i]} \
EXTRA_OPTS=${MYSQL_EXTRA_OPTS_ARRAY[i]} \
BACKUP_FOLDER="/backup/${MYSQL_BACKUP_FOLDER_ARRAY[i]}/" \
/scripts/mysql/mysql-run.sh
done
#Execute PostgreSQL backups
NB_CALLS=${#POSTGRES_HOST_ARRAY[@]}
for (( i=0; i < $NB_CALLS; i++ ))
do
POSTGRES_SERVICE_NAME=${POSTGRES_SERVICE_NAME_ARRAY[i]} \
POSTGRES_HOST=${POSTGRES_HOST_ARRAY[i]} \
POSTGRES_PORT=${POSTGRES_PORT_ARRAY[i]} \
POSTGRES_USER=${POSTGRES_USER_ARRAY[i]} \
POSTGRES_PASS=${POSTGRES_PASS_ARRAY[i]} \
POSTGRES_DB=${POSTGRES_DB_ARRAY[i]} \
INIT_BACKUP=${POSTGRES_INIT_BACKUP_ARRAY[i]} \
CRON_TIME=${POSTGRES_CRON_TIME_ARRAY[i]} \
EXTRA_OPTS=${POSTGRES_EXTRA_OPTS_ARRAY[i]} \
BACKUP_FOLDER="/backup/${POSTGRES_BACKUP_FOLDER_ARRAY[i]}/" \
/scripts/postgresql/postgres-run.sh
done
#Execute MongoDB backups
NB_CALLS=${#MONGO_HOST_ARRAY[@]}
for (( i=0; i < $NB_CALLS; i++ ))
do
MONGO_SERVICE_NAME=${MONGO_SERVICE_NAME_ARRAY[i]} \
MONGO_HOST=${MONGO_HOST_ARRAY[i]} \
MONGO_PORT=${MONGO_PORT_ARRAY[i]} \
MONGO_USER=${MONGO_USER_ARRAY[i]} \
MONGO_PASS=${MONGO_PASS_ARRAY[i]} \
MONGO_DB=${MONGO_DB_ARRAY[i]} \
INIT_BACKUP=${MONGO_INIT_BACKUP_ARRAY[i]} \
CRON_TIME=${MONGO_CRON_TIME_ARRAY[i]} \
BACKUP_FOLDER="/backup/${MONGO_BACKUP_FOLDER_ARRAY[i]}/" \
/scripts/mongodb/mongo-run.sh
done
exec cron -f
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