Advertisement
Guest User

Untitled

a guest
May 27th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ###
  4. # Backup Script
  5. ###
  6.  
  7. # Toggle debug mode for CLI output - "YES" or "NO"
  8. DEBUG="YES"
  9.  
  10.  
  11. # Command locations
  12. MYSQL="$(which mysql)"
  13. MYSQLDUMP="$(which mysqldump)"
  14. RCLONE="$(which rclone)"
  15. TAR="$(which tar)"
  16. GZIP="$(which gzip)"
  17. MKDIR="$(which mkdir)"
  18. RM="$(which rm)"
  19. DATE=`$(which date) +%Y%m%d`
  20.  
  21.  
  22. # Check if date is correctly calculated
  23. if [ "$DATE" == "" ]; then
  24. if [ "$DEBUG" == "YES" ]; then
  25. echo "Unable to calculate the date";
  26. fi
  27.  
  28. exit 1
  29. fi
  30.  
  31.  
  32. # Backup directory - where .tar.gz of WWW_DIR is stored temporarily
  33. BACKUP_DIR="/root/backup_data"
  34.  
  35. # Domain name for backup - used on backup archive filenames
  36. BACKUP_DOMAIN_NAME="domain.tld"
  37.  
  38. # Amazon S3 settings
  39. AWS_S3_BUCKET_WWW=""
  40. AWS_S3_BUCKET_CONTENT=""
  41.  
  42. # Paths (exclude trailing slash)
  43. WWW_DIR="/path/to/www"
  44. CONTENT_DIR="/path/to/content"
  45.  
  46. # MySQL settings
  47. MYSQL_HOST=""
  48. MYSQL_USER=""
  49. MYSQL_PASS=""
  50. MYSQL_DATABASE=""
  51.  
  52. # Rclone options
  53. RCLONE_CONFIG_PATH="/root/.config/rclone/rclone.conf"
  54. RCLONE_OPTIONS="--config $RCLONE_CONFIG_PATH" #RCLONE_OPTIONS="--dry-run --config $RCLONE_CONFIG_PATH"
  55. RCLONE_REMOTE_NAME="remote"
  56.  
  57.  
  58. ###
  59. # Start the script
  60. ###
  61.  
  62.  
  63. # Make sure all required applications are installed
  64.  
  65. if [ "$MYSQLDUMP" == "" ] || [ "$RCLONE" == "" ] || [ "$TAR" == "" ] || [ "$GZIP" == "" ] || [ "$RM" == "" ] || [ "$MKDIR" == "" ]; then
  66. if [ "$DEBUG" == "YES" ]; then
  67. echo "At least one of the required applications does not exist:"
  68. echo " mysqldump: $MYSQLDUMP"
  69. echo " rclone: $RCLONE"
  70. echo " tar: $TAR"
  71. echo " gzip: $GZIP"
  72. echo " mkdir: $MKDIR"
  73. echo " rm: $RM"
  74. fi
  75.  
  76. exit 1
  77. fi
  78.  
  79.  
  80. # Script introduction
  81.  
  82. if [ "$DEBUG" == "YES" ]; then
  83. echo "Starting $BACKUP_DOMAIN_NAME backup script...";
  84. echo " date: $DATE"
  85. echo " rclone remote: $RCLONE_REMOTE_NAME"
  86. echo " www path: $WWW_DIR"
  87. echo " www bucket: $AWS_S3_BUCKET_WWW"
  88. echo " mysql database: $MYSQL_DATABASE"
  89. echo " content path: $CONTENT_DIR"
  90. echo " content bucket: $AWS_S3_BUCKET_CONTENT"
  91. fi
  92.  
  93.  
  94. # Make sure backup directory exists for temporarily storing files generated by this script
  95.  
  96. if [ ! -d "$BACKUP_DIR" ]; then
  97. if [ "$DEBUG" == "YES" ]; then
  98. echo "Creating backup directory '$BACKUP_DIR'"
  99. fi
  100.  
  101. $MKDIR -p "$BACKUP_DIR"
  102.  
  103. if [ ! -d "$BACKUP_DIR" ]; then
  104. if [ "$DEBUG" == "YES" ]; then
  105. echo "Directory '$BACKUP_DIR' doesn't exist and was unable to be created"
  106. fi
  107.  
  108. exit 1
  109. fi
  110. fi
  111.  
  112.  
  113. # MOVE processed MySQL Dump + WWW directory
  114.  
  115. if [ -d "$WWW_DIR/" ]; then
  116. # MySQL dump
  117. if [ "$DEBUG" == "YES" ]; then
  118. echo "Dumping MySQL database..."
  119. fi
  120.  
  121. MYSQL_BACKUP_DIR="$WWW_DIR/dev/mysql_data"
  122.  
  123. if [ ! -d "$MYSQL_BACKUP_DIR" ]; then
  124. $MKDIR -p "$MYSQL_BACKUP_DIR"
  125. fi
  126.  
  127. if [ "$MYSQL_PASS" != "" ]; then
  128. MYSQL_CONNECTION_OPTIONS="--host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS"
  129. else
  130. MYSQL_CONNECTION_OPTIONS="--host=$MYSQL_HOST --user=$MYSQL_USER"
  131. fi
  132.  
  133. for MYSQL_TABLE_NAME in `$MYSQL $MYSQL_CONNECTION_OPTIONS -D$MYSQL_DATABASE -N -B -e 'show tables'`; do
  134. $MYSQLDUMP $MYSQL_CONNECTION_OPTIONS --opt $MYSQL_DATABASE $MYSQL_TABLE_NAME | $GZIP -c > "$MYSQL_BACKUP_DIR/$MYSQL_DATABASE.$MYSQL_TABLE_NAME.sql.gz"
  135. done
  136.  
  137. if [ "$DEBUG" == "YES" ]; then
  138. echo "Done!"
  139. fi
  140.  
  141.  
  142. # Backup WWW directory
  143. if [ "$DEBUG" == "YES" ]; then
  144. echo "Creating backup file of WWW directory..."
  145. fi
  146.  
  147. BACKUP_FILE_WWW_PATH="$BACKUP_DIR/$BACKUP_DOMAIN_NAME.$DATE.tar.gz"
  148.  
  149. $TAR -czf "$BACKUP_FILE_WWW_PATH" "$WWW_DIR/" --exclude "$CONTENT_DIR"
  150.  
  151. if [ "$DEBUG" == "YES" ]; then
  152. echo "Done!"
  153. fi
  154.  
  155. if [ -f "$BACKUP_FILE_WWW_PATH" ]; then
  156. if [ "$DEBUG" == "YES" ]; then
  157. echo "Uploading www file..."
  158. fi
  159.  
  160. RCLONE_WWW_DEST="$RCLONE_REMOTE_NAME:$AWS_S3_BUCKET_WWW"
  161. $RCLONE $RCLONE_OPTIONS move "$BACKUP_FILE_WWW_PATH" $RCLONE_WWW_DEST
  162.  
  163. # Remove backup file of WWW folder if rclone didn't delete it
  164. if [ -f "$BACKUP_FILE_WWW_PATH" ]; then
  165. $RM -f "$BACKUP_FILE_WWW_PATH"
  166. fi
  167.  
  168. if [ "$DEBUG" == "YES" ]; then
  169. echo "Done!"
  170. fi
  171. fi
  172. fi
  173.  
  174.  
  175. # SYNC content directory
  176.  
  177. if [ -d "$CONTENT_DIR/" ]; then
  178. if [ "$DEBUG" == "YES" ]; then
  179. echo "Syncing content directory..."
  180. fi
  181.  
  182. RCLONE_CONTENT_DEST="$RCLONE_REMOTE_NAME:$AWS_S3_BUCKET_CONTENT"
  183. $RCLONE $RCLONE_OPTIONS sync "$CONTENT_DIR" $RCLONE_CONTENT_DEST
  184.  
  185. if [ "$DEBUG" == "YES" ]; then
  186. echo "Done!"
  187. fi
  188. fi
  189.  
  190.  
  191.  
  192. if [ "$DEBUG" == "YES" ]; then
  193. echo "Script finished!"
  194. fi
  195.  
  196. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement