Guest User

Untitled

a guest
Jun 21st, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. #!/bin/bash
  2. # My first shell script :)
  3. # Backup domains directories and MySQL database.
  4.  
  5. clear
  6.  
  7. # CONFIGURATION
  8. MODE_D="0740"
  9. MODE_F="0640"
  10. DAY=$(date +%F) # YYYY-MM-DD
  11. BACKUP_DIR="${PWD}/${DAY}"
  12. LOG_FILE="${BACKUP_DIR}/log.txt"
  13.  
  14. # Dir to backup
  15. DOMAINS_DIR="/www"
  16.  
  17. # Mysql DB's to backup
  18. DB_HOST="localhost"
  19. #DB_USERS=( "" )
  20.  
  21. log(){
  22. if [ $# -eq 0 ]; then
  23. echo "loger: you must sypply some text to log"
  24. return
  25. fi
  26.  
  27. MSG=$1
  28. SHOW=$2
  29.  
  30. [ $SHOW == 1 ] && echo $MSG || :
  31.  
  32. if [ ! -f $LOG_FILE ]; then
  33. if ! touch $LOG_FILE; then
  34. echo "Can't crete log file."
  35. return
  36. else
  37. chmod $MODE_F $LOG_FILE
  38. fi
  39. fi
  40.  
  41. echo "$(date +%T) - ${MSG}\n" >> $LOG_FILE
  42. return
  43. }
  44.  
  45. process_domains(){
  46. # crete ${BACKUP_DIR}/domains dir
  47. BDD="${BACKUP_DIR}/domains"
  48. if [ ! -d $BDD ] && ! mkdir -p --mode=$MODE_D $BDD; then
  49. log "Can't create folder ${BDD}" 1
  50. return
  51. fi
  52.  
  53. for dir in $(ls -B $DOMAINS_DIR); do
  54. echo ""
  55. if [ -d "${DOMAINS_DIR}/${dir}" ]; then
  56. NAME="${BDD}/${dir}.tar.gz"
  57.  
  58. # check if backup alredy exists
  59. if [ -f $NAME ]; then
  60. log "Backup for ${DOMAINS_DIR}/${dir} alredy exists." 1
  61. else
  62. log "Processing directory: ${DOMAINS_DIR}/${dir}" 1
  63. tar --create --gzip --dereference --file=$NAME --directory="${DOMAINS_DIR}/${dir}" $(ls "${DOMAINS_DIR}/${dir}")
  64. if [ -f $NAME ]; then
  65. chmod $MODE_F $NAME
  66. log "Success: $(basename $NAME)" 1
  67. else
  68. log "Failure while processing: ${DOMAINS_DIR}/${dir}" 1
  69. fi
  70. fi # /backup alredy exists
  71. fi
  72. done
  73. return
  74. }
  75.  
  76. process_db(){
  77. local HOST=$1
  78. local USER_NAME=$2
  79. local DB_NAME=$USER_NAME
  80.  
  81. # crete ${BACKUP_DIR}/database dir
  82. local BDDB="${BACKUP_DIR}/database"
  83. if [ ! -d $BDDB ] && ! mkdir -p --mode=$MODE_D $BDDB; then
  84. log "Can't create folder ${BDDB}" 1
  85. return
  86. fi
  87.  
  88. local SQL_FILE="${BDDB}/${DB_NAME}.sql"
  89. local GZ_FILE="${SQL_FILE}.gz"
  90.  
  91. # check if backup alredy exists
  92. if [ -f $GZ_FILE ]; then
  93. log "Backup for db ${DB_NAME} alredy exists." 1
  94. else
  95. PASSWORD=$(get_pass $USER_NAME)
  96. echo ""
  97.  
  98. dump_db $HOST $USER_NAME $PASSWORD $DB_NAME $SQL_FILE
  99. ret=$?
  100.  
  101. if [ $ret != 0 ]; then
  102. [ -f $SQL_FILE ] && rm $SQL_FILE || :
  103.  
  104. # try agian?
  105. if [ $ret == 2 ]; then
  106. while true; do
  107. echo -n "Bad password for: ${USER_NAME} retry? (y or n) :"
  108. read CONFIRM
  109. case $CONFIRM in
  110. y|Y|YES|yes|Yes) break ;;
  111. n|N|no|NO|No)
  112. return
  113. ;;
  114. *) echo Please enter only y or n
  115. esac
  116. done
  117. process_db $HOST $USER_NAME
  118. fi
  119. return
  120. fi
  121.  
  122. if [ -f $SQL_FILE ]; then
  123. cat $SQL_FILE | gzip -9 > $GZ_FILE
  124. rm $SQL_FILE
  125.  
  126. if [ ! -f $GZ_FILE ]; then
  127. log "Failure while taring slq file" 1
  128. return
  129. fi
  130.  
  131. chmod $MODE_F $GZ_FILE
  132. log "Success: $(basename $GZ_FILE)" 1
  133. else
  134. log "Failure while processing database: ${DB_NAME}" 1
  135. fi
  136. fi
  137. return
  138. }
  139.  
  140. get_pass(){
  141. read -s -p "Password for user $1:" PASS
  142. echo $PASS
  143. return
  144. }
  145.  
  146. dump_db(){
  147. HOST=$1
  148. USER=$2
  149. PASSWORD=$3
  150. DB_NAME=$4
  151. FILE=$5
  152. mysqldump --user=$USER --host=$HOST -p$PASSWORD $DB_NAME > $FILE
  153. return
  154. }
  155.  
  156. echo "Starting backup for date: ${DAY}"
  157.  
  158. if [ ! -d $DOMAINS_DIR ]; then
  159. log "Folder for backup not found: ${DOMAINS_DIR}" 1
  160. elif [ ! -d $BACKUP_DIR ] && ! mkdir -p --mode=$MODE_D $BACKUP_DIR; then
  161. log "Can't create folder ${BACKUP_DIR}" 1
  162. else
  163. process_domains
  164.  
  165. # TODO do it better
  166. for user in "user1" "user2"; do
  167. echo ""
  168. process_db $DB_HOST $user
  169. done
  170. fi
Add Comment
Please, Sign In to add comment