db_backup/backup_mongo.sh
2023-06-16 13:56:15 +07:00

52 lines
1.9 KiB
Bash

MAX_BACKUPS=${MAX_BACKUPS}
FOLDER=$(date +%Y%m%d%H%M)
date=$(date +%Y%m%d)
dateValue=`date -R`
contentType="application/x-compressed-tar"
echo "=> [Backup MONGO] started at $(date "+%Y-%m-%d %H:%M:%S")"
# BACKUP_CMD="mongodump --out /backup/mongo/"'${FILENAME}'" --host ${MONGODB_HOST} --port ${MONGODB_PORT} ${MONGO_USER}${PASS_STR}${MONGO_PASS} ${EXTRA_OPTS}"
if [ -n "$MONGODB_URI" ]
then
BACKUP_CMD="mongodump --uri=${MONGODB_URI} -o /backup_mongo/${FOLDER}/"
elif [ -z "$MONGO_DB" ]
then
BACKUP_CMD="mongodump --host ${MONGODB_HOST} --port ${MONGODB_PORT} -o /backup_mongo/${FOLDER}/"
else
BACKUP_CMD="mongodump --host ${MONGODB_HOST} --port ${MONGODB_PORT} -d ${MONGO_DB} -o /backup_mongo/${FOLDER}/"
fi
if ${BACKUP_CMD} ;then
if [ -n "$S3_BACKUP" ]
then
${BACKUP_CMD}
cd /backup_mongo
tar -zcf ${FOLDER}.tar.gz ${FOLDER}
fname=$(basename "$FOLDER".tar.gz)
echo "Start sending $fname to S3"
resource="/${S3_BUCKET}/${S3_LOCATION}/${date}/mongo/${fname}"
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${S3_SECRET} -binary | base64`
curl -X PUT -T "${fname}" \
-H "Host: ${S3_BUCKET}.s3.amazonaws.com" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${S3_KEY}:${signature}" \
https://${S3_BUCKET}.s3.amazonaws.com/${S3_LOCATION}/${date}/mongo/${fname}
rm -rf ${FOLDER}.tar.gz
echo "$fname has been sent to S3 successfully."
fi
echo "Backup succeeded"
else
echo "Backup failed"
rmdir "/backup_mongo/${FOLDER}"
fi
if [ -n "$MAX_BACKUPS" ]
then
while [ "$(ls /backup_mongo | wc -l)" -gt "$MAX_BACKUPS" ]
do
FOLDER_DELETED=$(ls /backup_mongo -1 | sort | head -1)
echo "Deleting backup ${BACKUP_TO_BE_DELETED}"
rm -rf "/backup_mongo/${FOLDER_DELETED}"
done
fi