Advertisement
Guest User

Untitled

a guest
Sep 12th, 2017
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. function join_by { local IFS="$1"; shift; echo "$*"; }
  3. # Check for commands used by this script
  4. command -v pv >/dev/null 2>&1 || { echo >&2 "I require pv but it's not installed. Aborting."; exit 1; }
  5. command -v mysqldump >/dev/null 2>&1 || { echo >&2 "I require mysqldump but it's not installed. Aborting."; exit 1; }
  6. command -v gzip >/dev/null 2>&1 || { echo >&2 "I require gzip but it's not installed. Aborting."; exit 1; }
  7.  
  8. stages=$(git remote | sed 's/origin//g' | tr '\n' ' ' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
  9. stage_req=$1
  10.  
  11. availible_stages=$(IFS=, ; echo "${stages[*]}")
  12.  
  13. if [ "$1" == "" ]; then
  14. echo "Please give the stage to backup: (${availible_stages})"
  15. exit 1
  16. fi
  17. if [ "$1" == "-h" ]; then
  18. echo "This script is used to backup the database before deploy!"
  19. exit 2
  20. fi
  21.  
  22. if [[ " ${stages[@]} " =~ " $stage_req " ]]; then
  23. database_url=`heroku config -r ${stage_req} | grep DATABASE_URL | sed 's/DATABASE_URL://g' | sed 's/ //g'`
  24. database=`echo ${database_url} | sed -nE 's/.*\/{1}(.+)\?.*/\1/p'`
  25. dbhost=`echo ${database_url} | sed -nE 's/.*\@(.+)\/{1}.*/\1/p' | sed -nE 's/(.*)\/.*/\1/p'`
  26. dbuser=`echo ${database_url} | sed -nE 's/.*\/\/(.+)\:.*/\1/p'`
  27. dbpasswd=`echo ${database_url} | sed -nE 's/.*\:(.+)\@.*/\1/p'`
  28. else
  29. # is not correct
  30. echo "Please use a stage! (${availible_stages})"
  31. echo "${stage_req} is not a known stage!"
  32. exit 3
  33. fi
  34.  
  35. echo "Backing up ${database} database"
  36.  
  37. backup_date=`date +%Y_%m_%d_%H_%M`
  38. backup_dir=$HOME/dumps
  39. echo "Location: $backup_dir"
  40. mkdir -p $backup_dir
  41.  
  42. mysqldump -h ${dbhost} -u ${dbuser} --password=${dbpasswd} --compress --skip-lock-tables --port=3306 --single-transaction --routines --triggers --databases ${database} | pv | gzip -c > ${backup_dir}/${backup_date}_${database}.sql.gz
  43.  
  44. if [ $? -ne 0 ]; then
  45. echo "Error executing backup for $stage ! Exiting!"
  46. exit 4
  47. fi
  48. arr=(staging acceptance)
  49. if [[ " ${arr[@]} " =~ " $stage " ]]; then
  50. echo "Cleaning up older backups. Keeping latest 2."
  51. ls -tp ${backup_dir}/*_${database}.sql.gz | tail -n +3 | while IFS= read -r f; do rm "$f"; done
  52. else
  53. echo "Cleaning up older backups. Keeping latest 4."
  54. ls -tp ${backup_dir}/*_${database}.sql.gz | tail -n +5 | while IFS= read -r f; do rm "$f"; done
  55. fi
  56.  
  57. file_size=`du -h ${backup_dir}/${backup_date}_${database}.sql.gz`
  58. echo "Done with backup! Size: $file_size"
  59. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement