From 568d91fb3151328cd3a35b2bb047b22f94627f39 Mon Sep 17 00:00:00 2001 From: Dmitriy Voeykov Date: Wed, 23 Dec 2015 19:59:14 +0300 Subject: [PATCH 1/5] Add ability to backup only single database --- README.md | 9 +++++++++ backup.sh | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 262c235..db4427c 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,12 @@ To run backup once without cron job, add `no-cron` parameter: -v /path/to/target/folder:/backup \ # where to put backups --link my-mongo-container:mongo \ # linked container with running mongo istepanov/mongodump no-cron + +To backup only one database, set environment variable `MONGO_DB_NAME` + + docker run -d \ + -v /path/to/target/folder:/backup \ # where to put backups + -e 'CRON_SCHEDULE=0 1 * * *' \ # cron job schedule + -e 'MONGO_DB_NAME=' \ # set database name + --link my-mongo-container:mongo \ # linked container with running mongo + istepanov/mongodump diff --git a/backup.sh b/backup.sh index f24f578..bfb6e89 100644 --- a/backup.sh +++ b/backup.sh @@ -7,7 +7,12 @@ echo "Job started: $(date)" DATE=$(date +%Y%m%d_%H%M%S) FILE="/backup/backup-$DATE.tar.gz" -mongodump --quiet -h $MONGO_PORT_27017_TCP_ADDR -p $MONGO_PORT_27017_TCP_PORT +arr=("--quiet" "-h" "$MONGO_PORT_27017_TCP_ADDR" "-p" "$MONGO_PORT_27017_TCP_PORT") +if [ ! -z $MONGO_DB_NAME ]; then + arr+=("-d") + arr+=("$MONGO_DB_NAME") +fi +mongodump "${arr[@]}" tar -zcvf $FILE dump/ rm -rf dump/ From 2a87e2d0f559aff44249372361ba666bbc938ac9 Mon Sep 17 00:00:00 2001 From: Dmitriy Voeykov Date: Thu, 28 Apr 2016 15:57:47 +0300 Subject: [PATCH 2/5] fix mongo version --- Dockerfile | 2 +- start.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a07ec3c..a8f40fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mongo:3.0 +FROM mongo:3.0.11 MAINTAINER Ilya Stepanov RUN apt-get update && \ diff --git a/start.sh b/start.sh index 34cf936..b11a7ce 100644 --- a/start.sh +++ b/start.sh @@ -13,6 +13,7 @@ else fi CRON_ENV="MONGO_PORT_27017_TCP_ADDR='$MONGO_PORT_27017_TCP_ADDR'" CRON_ENV="$CRON_ENV\nMONGO_PORT_27017_TCP_PORT='$MONGO_PORT_27017_TCP_PORT'" + CRON_ENV="$CRON_ENV\nMONGO_DB_NAME='$MONGO_DB_NAME'" echo -e "$CRON_ENV\n$CRON_SCHEDULE /backup.sh > $LOGFIFO 2>&1" | crontab - crontab -l cron From e908d4f4593a4f287f69eb96eb159b40215f92a2 Mon Sep 17 00:00:00 2001 From: Dmitriy Voeykov Date: Thu, 28 Apr 2016 18:23:38 +0300 Subject: [PATCH 3/5] add autoclean --- README.md | 3 +++ backup.sh | 17 ++++++++++++++++- start.sh | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index db4427c..6f594b2 100644 --- a/README.md +++ b/README.md @@ -28,3 +28,6 @@ To backup only one database, set environment variable `MONGO_DB_NAME` -e 'MONGO_DB_NAME=' \ # set database name --link my-mongo-container:mongo \ # linked container with running mongo istepanov/mongodump + +By default, backups available for last 30 days only. To manage it, set environment +variable `MONGO_BACKUP_EXPIRE_DAYS` diff --git a/backup.sh b/backup.sh index bfb6e89..82bc748 100644 --- a/backup.sh +++ b/backup.sh @@ -15,5 +15,20 @@ fi mongodump "${arr[@]}" tar -zcvf $FILE dump/ rm -rf dump/ - echo "Job finished: $(date)" +echo "Start autoclean" +FILES=/backup/*.tar.gz +currtime=`date +%s` +for f in $FILES +do + if [-f $f]; + then + filemtime=`stat -c %Y $f` + diff=$(( (currtime - filemtime)/86400)) + if (($diff > $MONGO_BACKUP_EXPIRE_DAYS)); + then + rm $f + fi + fi +done +echo "End autoclean" diff --git a/start.sh b/start.sh index b11a7ce..2742117 100644 --- a/start.sh +++ b/start.sh @@ -3,7 +3,7 @@ set -e CRON_SCHEDULE=${CRON_SCHEDULE:-0 1 * * *} - +MONGO_BACKUP_EXPIRE_DAYS=${MONGO_BACKUP_EXPIRE_DAYS:-30} if [[ "$1" == 'no-cron' ]]; then exec /backup.sh else @@ -14,6 +14,7 @@ else CRON_ENV="MONGO_PORT_27017_TCP_ADDR='$MONGO_PORT_27017_TCP_ADDR'" CRON_ENV="$CRON_ENV\nMONGO_PORT_27017_TCP_PORT='$MONGO_PORT_27017_TCP_PORT'" CRON_ENV="$CRON_ENV\nMONGO_DB_NAME='$MONGO_DB_NAME'" + CRON_ENV="$CRON_ENV\nMONGO_BACKUP_EXPIRE_DAYS=$MONGO_BACKUP_EXPIRE_DAYS" echo -e "$CRON_ENV\n$CRON_SCHEDULE /backup.sh > $LOGFIFO 2>&1" | crontab - crontab -l cron From c4e1032a73663ada87bd7f9b830cd5c5728129b5 Mon Sep 17 00:00:00 2001 From: Dmitriy Voeykov Date: Thu, 28 Apr 2016 18:42:34 +0300 Subject: [PATCH 4/5] hotfix for missing spaces in bash condition --- backup.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backup.sh b/backup.sh index 82bc748..659509c 100644 --- a/backup.sh +++ b/backup.sh @@ -9,8 +9,8 @@ FILE="/backup/backup-$DATE.tar.gz" arr=("--quiet" "-h" "$MONGO_PORT_27017_TCP_ADDR" "-p" "$MONGO_PORT_27017_TCP_PORT") if [ ! -z $MONGO_DB_NAME ]; then - arr+=("-d") - arr+=("$MONGO_DB_NAME") + arr+=("-d") + arr+=("$MONGO_DB_NAME") fi mongodump "${arr[@]}" tar -zcvf $FILE dump/ @@ -21,13 +21,15 @@ FILES=/backup/*.tar.gz currtime=`date +%s` for f in $FILES do - if [-f $f]; + if [ -f $f ]; then filemtime=`stat -c %Y $f` diff=$(( (currtime - filemtime)/86400)) if (($diff > $MONGO_BACKUP_EXPIRE_DAYS)); then + echo "deleting '$f' ..." rm $f + echo "deleted." fi fi done From af8791f96deaf585972e900b5ed1e8d560587db3 Mon Sep 17 00:00:00 2001 From: Dmitriy Voeykov Date: Thu, 28 Apr 2016 19:04:12 +0300 Subject: [PATCH 5/5] add TZ variable --- start.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/start.sh b/start.sh index 2742117..3b98aec 100644 --- a/start.sh +++ b/start.sh @@ -15,6 +15,7 @@ else CRON_ENV="$CRON_ENV\nMONGO_PORT_27017_TCP_PORT='$MONGO_PORT_27017_TCP_PORT'" CRON_ENV="$CRON_ENV\nMONGO_DB_NAME='$MONGO_DB_NAME'" CRON_ENV="$CRON_ENV\nMONGO_BACKUP_EXPIRE_DAYS=$MONGO_BACKUP_EXPIRE_DAYS" + CRON_ENV="$CRON_ENV\nTZ=$TZ" echo -e "$CRON_ENV\n$CRON_SCHEDULE /backup.sh > $LOGFIFO 2>&1" | crontab - crontab -l cron