Advertisement
Guest User

Untitled

a guest
Sep 12th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3.  
  4. ########
  5.  
  6. # Purpose :- To take a backup of MongoDB Collections and upload to AWS s3
  7. # Requirement :- Make Sure Collection.config file is present in /data/Backup/mongodb
  8. # format for Collection.config is db|collection
  9. # For example
  10. # db1|collections1
  11. # db2|collection2
  12. # Bug Report to :- jadhav.nitin941@gmail.com
  13. ########
  14.  
  15. PROGNAME=$(basename $0)
  16. BACKUP_DIR="/data/Backup/mongodb/Dump"
  17. DATE=$(date +"%F_%H")
  18. BOX=$(uname -n)
  19. COLLECTION_FILE=$(dirname ${BACKUP_DIR})/Collection.config
  20. LOGDIR=$(dirname ${BACKUP_DIR})/logs/Dump/
  21. LOGFILE="backup_${DATE}.log"
  22. LOCKFILE="/tmp/${PROGNAME}.lock"
  23. REMOVE_FILE_DAYS=7
  24. MONGODUMP_PATH="/usr/bin/mongodump"
  25. MONGO_HOST="localhost"
  26. MONGO_PORT="27017"
  27. MONGO_USER=""
  28. MONGO_PASSWORD=""
  29. BUCKET="s3://database-backup/mongo-backup/"
  30. MAILTO="jadhav.nitin941@gmail.com"
  31.  
  32. LOCK_FILE ()
  33. {
  34. if [ "$1" = "create" ]; then
  35. if [ -f $LOCKFILE ]; then
  36. SEND_MAIL "ERROR::" "Unable to create lock may lock file not removed"
  37. exit 0
  38. fi
  39. touch $LOCKFILE
  40. fi
  41. if [ "$1" = "remove" ]; then
  42. rm -fr $LOCKFILE
  43. fi
  44. }
  45.  
  46.  
  47.  
  48. SEND_MAIL ()
  49. {
  50. mail -s "${BOX} :: ${PROGNAME} : $1 $2" -t $MAILTO < $LOGDIR/$LOGFILE
  51. LOCK_FILE "remove"
  52. if [ $1 = "ERROR" ];then
  53. exit 1
  54. else
  55. exit 0
  56. fi
  57.  
  58. }
  59.  
  60. LOCK_FILE "create"
  61. echo "Script started at :- $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  62.  
  63. ####### Backup and log Directory checking and creations
  64.  
  65.  
  66.  
  67. for dir in "${BACKUP_DIR}" "${LOGDIR}"
  68.  
  69. do
  70. if [ ! -d "${dir}" ]; then
  71. mkdir -p ${dir} 1>/dev/null 2>/dev/null
  72. if [ $? -ne 0 ]; then
  73. SEND_MAIL "ERROR::" "Unable to Create ${dir} Directory :"
  74. LOCK_FILE "remove"
  75. exit 1
  76. fi
  77. fi
  78. done
  79.  
  80. ####### Collection file checking
  81.  
  82. if [ ! -f "${COLLECTION_FILE}" ]; then
  83. SEND_MAIL "ERROR::" " COLLECTION FILE is not Present :"
  84. else
  85. if [ ! -s "${COLLECTION_FILE}" ]; then
  86. SEND_MAIL "ERROR ::" "COLLECTION FILE is ZERO byte"
  87. fi
  88.  
  89. ####### Dump logic started
  90. for collection_files in $(cat ${COLLECTION_FILE})
  91. do
  92. MONGO_DATABASE=$(echo ${collection_files} | cut -d"|" -f1)
  93. COLLECTION=$(echo ${collection_files} | cut -d"|" -f2)
  94.  
  95. ${MONGODUMP_PATH} --db ${MONGO_DATABASE} --collection ${COLLECTION} --host ${MONGO_HOST} --port ${MONGO_PORT} --out ${BACKUP_DIR}/${DATE} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  96. if [ $? -ne 0 ]; then
  97. SEND_MAIL "ERROR ::" " Unable to take dump for collection ${COLLECTION}"
  98. fi
  99. done
  100.  
  101. ###### Dump Logic ended
  102.  
  103. ###### Compression Logic started
  104. tar -zvcf ${BACKUP_DIR}/${DATE}.tgz ${BACKUP_DIR}/${DATE} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  105. if [ $? -ne 0 ]; then
  106. SEND_MAIL "ERROR ::" " Unable to compress ${BACKUP_DIR}/${MONGO_DATABASE}_${DATE} directory"
  107.  
  108. else
  109. rm -fr ${BACKUP_DIR}/${DATE}
  110. find ${BACKUP_DIR} -name *.tgz -mtime +${REMOVE_FILE_DAYS} -exec rm {} \; 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  111. if [ $? -eq 0 ]; then
  112. echo "Removed old backup files." 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  113. fi
  114. fi
  115.  
  116. ######################### Pushing data to S3 bucket
  117.  
  118. s3cmd put ${BACKUP_DIR}/${DATE}.tgz ${BUCKET} 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  119. if [ $? -ne 0 ];then
  120. SEND_MAIL "ERROR ::" " Unable to send data to S3 Bucket"
  121. fi
  122.  
  123. LOCK_FILE "remove"
  124. if [ $? -eq 0 ]; then
  125. echo "Removed lock file file." 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  126. SEND_MAIL "Success::" "Backup Script executed successfully."
  127. fi
  128. fi
  129. echo "Script Ended at $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
  130. exit 0
  131. #### END OF LOGIC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement