Skip to content
Snippets Groups Projects
Commit 0823712b authored by Schiffer, Christian's avatar Schiffer, Christian
Browse files

Setup backup container for microdraw database

parent 363a565e
No related branches found
No related tags found
No related merge requests found
......@@ -6,5 +6,6 @@ atlas_controller/venv/
atlas_controller/work_dir/
atlas_server/mongodb/
microdraw/mariadb_data/
microdraw/mariadb_backup/
microdraw/data/
*.swp
......@@ -7,6 +7,7 @@ version: '3'
services:
atlas-server-uwsgi:
image: atlas-server-uwsgi
restart: always
build: "./atlas_server/uwsgi"
volumes:
- "./atlas_server/src:/src/atlas_server"
......@@ -14,6 +15,7 @@ services:
atlas-server-nginx:
image: atlas-server-nginx
restart: always
build: "./atlas_server/nginx"
ports:
- 5000:80
......@@ -42,6 +44,7 @@ services:
microdraw-php:
image: microdraw-php
restart: always
build:
context: "./microdraw/"
dockerfile: Dockerfile-php
......@@ -58,3 +61,20 @@ services:
volumes:
- "./microdraw/mariadb_data:/var/lib/mysql"
- "./microdraw/mariadb_init:/docker-entrypoint-initdb.d"
microdraw-mariadb-backup:
image: microdraw-db-backup
restart: always
build:
context: "./microdraw"
dockerfile: Dockerfile-db-backup
environment:
# Make sure this matches name of microdraw-mariadb container
MYSQL_CONTAINER_NAME: microdraw-mariadb
# Make sure this is the sam as in microdraw-mariadb
MYSQL_ROOT_PASSWORD: root
volumes:
- "/etc/localtime:/etc/localtime:ro"
# Note: This directory is a synced to /data/BDA-Data/personal/cschiffer/backup/atlasui/microdraw_db.
- "./microdraw/mariadb_backup:/opt/mysql/backup"
command: crond -f -d 8
FROM alpine:latest
# Install mariadb client
RUN apk update && \
apk upgrade && \
apk add --no-cache mariadb-client && \
apk add --no-cache python3 \
apk add --no-cache rdiff-backup
# Copy backup script to cron folder
COPY ./db_backup_scripts/daily/* /etc/periodic/daily
# Make scripts executable
RUN chmod a+x /etc/periodic/daily/*
#!/usr/bin/env sh
# --------------------------------------------------------------------------
# Backup database
# Based on
# https://github.com/ricardolsmendes/docker-samples/blob/master/mysql-mariadb/periodic-backup/scripts/daily/backup-database
# https://ricardolsmendes.medium.com/mysql-mariadb-with-scheduled-backup-jobs-running-in-docker-1956e9892e78
# https://www.guguweb.com/2020/01/30/mysql-incremental-backup-with-mysqldump-and-rdiff-backup/
# --------------------------------------------------------------------------
BACKUP_FOLDER=/opt/mysql/backup
DUMP_FOLDER=/opt/mysql/dumps
# Find rdiff-backup and mysqldump
MYSQLDUMP=$(which mysqldump)
RDIFF=$(which rdiff-backup)
### MySQL Server Login info ###
MHOST=${MYSQL_CONTAINER_NAME}
MPASS=${MYSQL_ROOT_PASSWORD}
MUSER=root
# Create backup folder
[ ! -d "${BACKUP_FOLDER}" ] && mkdir -p ${BACKUP_FOLDER}
[ ! -d "${DUMP_FOLDER}" ] && mkdir -p ${DUMP_FOLDER}
# Dump all databases to the dump folder first
${MYSQLDUMP} -h ${MHOST} -u ${MUSER} -p${MPASS} --all-databases --single-transaction --quick --skip-extended-insert --routines > ${DUMP_FOLDER}/databases.dump
# rdiff-backup now compares the dump folder to the latest backup folder and stores the differences
${RDIFF} ${DUMP_FOLDER} ${BACKUP_FOLDER}
# Remove deleted entries after 30 days
${RDIFF} --force --remove-older 30D ${BACKUP_FOLDER}
# To restore a specific timestamp, use
# rdiff-backup -r 2D /path/to/backup/dir/dbname.dump /tmp/dbname_restored.dump
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment