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
MONGO_USERNAME=mongoUserName
MONGO_PASSWORD=mongoPassword
AZ_ACCOUNT_NAME=azureFileStorageAccountName
AZ_ACCOUNT_KEY=azureFileStorageSecretKey
AZ_CONTAINER=azureFileStorageContainer
#! /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
docker-compose exec -T db mongorestore --archive --gzip < dump.gz