I found the following code online (can’t recall from where) and modified it to fit my needs. I have it run twice a day.
!/bin/bash
BACKUPS_DIRECTORY="/tutor/backups/"
NUMBER_OF_BACKUPS_TO_RETAIN="14"
MYSQL_DOCKER_IMAGE="tutor_local_mysql_1"
MONGODB_DOCKER_IMAGE="tutor_local_mongodb_1"
#Check to see if a backups/ folder exists. if not, create it.
if [ ! -d ${BACKUPS_DIRECTORY} ]; then
mkdir ${BACKUPS_DIRECTORY}
echo "created backups folder ${BACKUPS_DIRECTORY}"
fi
cd ${BACKUPS_DIRECTORY}
#Backup MySQL databases
echo "Backing up MySQL databases"
docker exec ${MYSQL_DOCKER_IMAGE} /usr/bin/mysqldump -u root --password=${MYSQL_PWD} openedx | gzip -9 -c > "mysql_backup_$(date +"%Y%m%d_%H%M%S").sql.gz"
echo "Done backing up MySQL"
echo "Backing up MongoDB"
docker exec ${MONGODB_DOCKER_IMAGE} mongodump --archive --gzip --db openedx > "mongo_backup_$(date +"%Y%m%d_%H%M%S").gz"
echo "Done backing up MongoDB"
echo "Pruning the local backup folder archive"
if [ -d ${BACKUPS_DIRECTORY} ]; then
cd ${BACKUPS_DIRECTORY}
ls -1tr | head -n -${NUMBER_OF_BACKUPS_TO_RETAIN} | xargs -d '\n' rm -f --
fi
echo "Done!"