#!/bin/bash
########
# purpose :- To take a backup of MongoDB Collections.
# Requirement :- Make Sure database.config file is present in /data/Backup/mongodb
# cat /data/Backup/mongodb/database.config
# db1
# db2
########
PROGNAME=$(basename $0)
BACKUP_DIR="/data/Backup/mongodb/Dump"
#DATE=$(date +"%F")
DATE=$(date +%Y_%m_%d)
S3_DEL=$(date --date "30 days ago" +%Y_%m_%d)
BOX=$(uname -n)
DATBASE_FILE=$(dirname ${BACKUP_DIR})/database.config
LOGDIR=$(dirname ${BACKUP_DIR})/logs/Dump/
LOGFILE="backup_${DATE}.log"
LOCKFILE="/tmp/${PROGNAME}.lock"
REMOVE_FILE_DAYS=7
MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="localhost"
MONGO_PORT="27017"
MONGO_USER=""
MONGO_PASSWORD=""
BUCKET="s3://working/mongo-backup/"
LOG_BUCKET="s3://working/mongo-backup/logs/"
#MAILTO="<MAIL-ADDRESS>"
LOCK_FILE ()
{
if [ "$1" = "create" ]; then
if [ -f $LOCKFILE ]; then
SEND_MAIL "ERROR::" "Unable to create lock may lock file not removed"
exit 0
fi
touch $LOCKFILE
fi
if [ "$1" = "remove" ]; then
rm -fr $LOCKFILE
fi
}
SEND_MAIL ()
{
mail -s "${BOX} :: ${PROGNAME} : $1 $2" -t $MAILTO < $LOGDIR/$LOGFILE
LOCK_FILE "remove"
exit 1
}
LOCK_FILE "create"
echo "Script started at :- $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
####### Backup and log Directory checking and creations
for dir in "${BACKUP_DIR}" "${LOGDIR}"
do
if [ ! -d "${dir}" ]; then
mkdir -p ${dir} 1>/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
SEND_MAIL "ERROR::" "Unable to Create ${dir} Directory :"
LOCK_FILE "remove"
exit 1
fi
fi
done
####### Collection file checking
if [ ! -f "${DATBASE_FILE}" ]; then
SEND_MAIL "ERROR::" " DATABASE Config file is not Present :"
else
if [ ! -s "${DATBASE_FILE}" ]; then
SEND_MAIL "ERROR ::" "DATABASE Config file is ZERO byte"
fi
####### Dump logic started
for MONGO_DATABASE in $(cat ${DATBASE_FILE})
do
${MONGODUMP_PATH} --db ${MONGO_DATABASE} --host ${MONGO_HOST} --port ${MONGO_PORT} --out ${BACKUP_DIR}/${DATE} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -ne 0 ]; then
SEND_MAIL "ERROR ::" " Unable to take dump for database ${MONGO_DATABASE}"
fi
done
###### Dump Logic ended
###### Compression Logic started
tar -zvcf ${BACKUP_DIR}/${DATE}.tgz ${BACKUP_DIR}/${DATE} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -ne 0 ]; then
SEND_MAIL "ERROR ::" " Unable to compress ${BACKUP_DIR}/${MONGO_DATABASE}_${DATE} directory"
else
rm -fr ${BACKUP_DIR}/${DATE}
find ${BACKUP_DIR} -name *.tgz -mtime +${REMOVE_FILE_DAYS} -exec rm {} \; 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -eq 0 ]; then
echo "Removed old backup files." 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
fi
find ${LOGDIR} -name *.log -mtime +${REMOVE_FILE_DAYS} -exec rm {} \; 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -eq 0 ]; then
echo "Removed old log files." 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
fi
fi
######################### Pushing data to S3 bucket
s3cmd put ${BACKUP_DIR}/${DATE}.tgz ${BUCKET} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -ne 0 ];then
SEND_MAIL "ERROR ::" " Unable to send data to S3 Bucket"
fi
fi
s3cmd put $LOGDIR/$LOGFILE ${LOG_BUCKET} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -ne 0 ];then
SEND_MAIL "ERROR ::" " Unable to send logs to S3 Bucket"
fi
s3cmd del ${BUCKET}${S3_DEL}.tgz 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
if [ $? -ne 0 ];then
SEND_MAIL "ERROR ::" " Unable to delete data from S3 Bucket"
fi
echo "Script Ended at $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
LOCK_FILE "remove"
if [ $? -eq 0 ]; then
echo "Removed lock file file." 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
rm -vf ${BACKUP_DIR}/${DATE}.tgz 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
SEND_MAIL "Success::" "Backup Script executed successfully."
fi
exit 0
#### END OF LOGIC
#
No comments:
Post a Comment