Skip to content

Instantly share code, notes, and snippets.

@jfollmann
Last active April 18, 2020 05:07
Show Gist options
  • Save jfollmann/a7f8ff1e5e99f4ba73d984a25cd4c72b to your computer and use it in GitHub Desktop.
Save jfollmann/a7f8ff1e5e99f4ba73d984a25cd4c72b to your computer and use it in GitHub Desktop.
Backup mongo db's in shellscript with azure storage upload

Backup mongo db's in shellscript with azure storage upload

Add docker-compose in PATH

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

.env file

MONGO_USERNAME=mongoUserName
MONGO_PASSWORD=mongoPassword
AZ_ACCOUNT_NAME=azureFileStorageAccountName
AZ_ACCOUNT_KEY=azureFileStorageSecretKey
AZ_CONTAINER=azureFileStorageContainer

backup.sh

#!/bin/bash
#Remove files older than 5 days
find /mongo_backups -type f -name '*.gz' -mtime +5 -exec rm {} \;

MONGO_USERNAME=$(grep MONGO_USERNAME .env | cut -d '=' -f2)
MONGO_PASSWORD=$(grep MONGO_PASSWORD .env | cut -d '=' -f2)
AZ_ACCOUNT_NAME=$(grep AZ_ACCOUNT_NAME .env | cut -d '=' -f2)
AZ_ACCOUNT_KEY=$(grep AZ_ACCOUNT_KEY .env | cut -d '=' -f2)
AZ_CONTAINER=$(grep AZ_CONTAINER .env | cut -d '=' -f2)
CURRENT_DATE=$(date +'%Y-%m-%d')

# Workaround :P
AZ_ACCOUNT_KEY="${AZ_ACCOUNT_KEY}=="

dbs=$(docker-compose exec -T mongo mongo -u $MONGO_USERNAME -p $MONGO_PASSWORD \ 
         --quiet --eval 'db.getMongo().getDBNames()' | grep '"' | tr -d '",')

for item in ${dbs[@]}; do
        FILE_NAME="$item"_"$CURRENT_DATE".gz
        docker-compose exec -T mongo mongodump --authenticationDatabase admin \
                -u $MONGO_USERNAME -p $MONGO_PASSWORD --archive --gzip \
                --db "$item" > mongo_backups/"$FILE_NAME"
                
	az storage blob upload -c $AZ_CONTAINER \
		-f mongo_backups/"$FILE_NAME" \
		--name "$CURRENT_DATE/$FILE_NAME" \
		--account-name $AZ_ACCOUNT_NAME \
		--account-key $AZ_ACCOUNT_KEY
	done;
	
# Remove files older than 30 days in az storage
DATE_STORAGE=`date -d "30 days ago" '+%Y-%m-%dT%H:%MZ'`
az storage blob delete-batch -s $AZ_CONTAINER \
	--account-name $AZ_ACCOUNT_NAME \
	--account-key $AZ_ACCOUNT_KEY \
	--pattern *.gz \
	--if-unmodified-since $DATE_STORAGE	

restore.sh

docker-compose exec -T db mongorestore --archive --gzip < dump.gz
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment