Advertisement
Guest User

Untitled

a guest
May 9th, 2017
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Backs up MySQL databases with zero downtime using Percona Xtrabackup.
  4. # Stores 30 days worth on Amazon s3.
  5.  
  6. # These {{ double bracket }} things are Ansible/Jinja (ansible-vault) variables.
  7. # Fill them in for your own usage.
  8. MYSQLROOT=root
  9. MYSQLPASS="{{ mysql_root_pass }}"
  10. S3BUCKET={{ mysql_backup_bucket }}
  11. BACKUP_DIR={{ mysql_archive_path }}
  12. TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
  13.  
  14. # Performance tuning
  15. NUM_THREADS=4
  16. USE_MEMORY={{ (ansible_memory_mb.real.total * 0.25) | int }}M
  17.  
  18. BACKUP_COMMAND="/usr/bin/innobackupex --user=${MYSQLROOT} --password=${MYSQLPASS} --no-timestamp ${BACKUP_DIR}/latest/ --parallel=${NUM_THREADS} --use-memory=${USE_MEMORY}"
  19.  
  20. CURRENT_ARCHIVE="${BACKUP_DIR}/mysql_${TIMESTAMP}.tar.gz"
  21.  
  22. echo "= Remove previous backup ------------------------------------------------"
  23. rm -rf ${BACKUP_DIR}/latest/*
  24.  
  25. echo "= Ensure file permissions are intelligent -------------------------------"
  26. chmod -R 700 ${BACKUP_DIR}
  27.  
  28. echo "= Back that SQL up... ---------------------------------------------------"
  29. ${BACKUP_COMMAND}
  30.  
  31. echo "= Prepare backup for immediate use --------------------------------------"
  32. ${BACKUP_COMMAND} --apply-log
  33.  
  34. echo "= Compress mysql archive ------------------------------------------------"
  35. tar czf ${CURRENT_ARCHIVE} -C ${BACKUP_DIR}/latest/ ${BACKUP_DIR}/latest/*
  36.  
  37. echo "= Upload archive to s3 --------------------------------------------------"
  38. s3cmd put -f ${CURRENT_ARCHIVE} s3://${S3BUCKET}/
  39.  
  40. echo "= Remove 30 day old LOCAL backups ---------------------------------------"
  41. ls -1tr ${BACKUP_DIR}|head -n -30|xargs -d '\n' rm -rf --
  42.  
  43. echo "= Remove 30 day old s3 backups ------------------------------------------"
  44. s3cmd ls s3://${S3BUCKET} | while read -r line;
  45. do
  46. createDate=`echo $line|awk {'print $1" "$2'}`
  47. createDate=`date -d"$createDate" +%s`
  48. olderThan=`date -d"-$2" +%s`
  49. if [[ $createDate -lt $olderThan ]]
  50. then
  51. fileName=`echo $line|awk {'print $4'}`
  52. echo $fileName
  53. if [[ $fileName != "" ]]
  54. then
  55. s3cmd del "$fileName"
  56. fi
  57. fi
  58. done;
  59.  
  60. echo ""
  61. echo "MySQL backup done!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement