flipje

mysql-hourly-daily-backup

Jan 7th, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.87 KB | None | 0 0
  1. #!/bin/bash
  2. # dit script maakt elk uur een dump van de database zonder extended inserts
  3. # als het dan nodig is, kan je zonder eerst een dump te moeten maken meteen lekker greppen in de dump file
  4. # iedere 24 uur worden de oude dumps weer overschreven.
  5.  
  6. # Global variables:
  7.  
  8. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  9. SCRIPT_PATH="${0}"
  10. ARG1="${1}"
  11. TOTARG="${#}"
  12. TIME_STAMP="$(date +'%Y%m%d_%Hhr%M')"
  13.  
  14. LOG="/var/log/dump.log"
  15.  
  16. # First things first, dit script mag alleen als root draaien
  17.   user=$(whoami)
  18.   if [ ${user} != "root" ]
  19.   then
  20.       echo "Bark Bark! This script only runs as root!"
  21.       exit 1
  22.   fi
  23.  
  24. # The Functions:
  25.  
  26. # function die
  27. function die()
  28. {
  29.   echo "${SCRIPT_PATH}: ${1}"
  30.   exit 1
  31. }
  32.  
  33. # functie backup
  34. function fBackup()
  35. {
  36.  # check for BACKUP var
  37.   [ -n ${BACKUP} ] || die "Not enough arguments given!"
  38.  
  39.  # checken binaries
  40.   { test -x /usr/bin/mysqldump  && test -x /usr/bin/mysql && test -x /bin/gzip ; } || die "This script depends on mysql-common!"
  41.  
  42.  # check op .my.cnf
  43.   if [ ! -f /root/.my.cnf ]; then
  44.     die "/root/.my.cnf Not found!"
  45.   fi
  46.  
  47.  # checken op connectiviteit
  48.   mysql --connect_timeout=2 -Be 'show databases' -h 127.0.0.1 |grep -Eq '(information_schema|mysql)'
  49.   [ ${?} = 0 ] || die "Failed to connect to database!"
  50.  
  51.  # backuppen
  52.   for DB in $( mysql --connect_timeout=2 -Be "show databases" |sed 1d |grep -Ev '(information_schema)' | xargs echo )
  53.   do
  54.     # set location
  55.      if [ ${BACKUP} = 'hourly' ] ; then
  56.        DEST="/home/dump/hourly"
  57.        NAME="${DB}-dump-$(date +"%H:00").sql.gz"
  58.      elif [ ${BACKUP} = 'daily' ] ; then
  59.        DEST="/home/dump/daily"
  60.        NAME="${DB}-dump-$(date +"%Y%m%d").sql.gz"
  61.      fi
  62.  
  63.     # checken op dir
  64.      [ -d ${DEST} ] || die "${DEST} dir not found!"
  65.  
  66.     # backup mysql database:
  67.      mysqldump --skip-extended-insert ${DB} | gzip  > ${DEST}/${NAME}
  68.      [ ${?} = 0 ] || { echo "${SCRIPT_PATH}: Failed to dump database ${DB} to ${DEST}/${NAME}" |tee -a ${LOG} ; continue; }
  69.   done
  70.  
  71.   # mooie output:
  72.   echo "${SCRIPT_PATH}: mysql backup of \"${TIME_STAMP}\" backup succeeded " >> ${LOG}
  73.  
  74.   return 0
  75. }
  76.  
  77. # Shows usage.
  78. function fUsage()
  79. {
  80.   echo
  81.   echo "Usage: ${SCRIPT_PATH} daily|hourly|usage"
  82.   echo
  83.   echo "hourly         : makes an hourly dump of the DB"
  84.   echo "daily          : makes a daily dump of the DB"
  85.   echo "usage          : show usage information."
  86.   echo
  87.   echo "This script uses --skip-extended-insert for dumping"
  88.   echo
  89.  
  90.   return 0
  91. }
  92.  
  93. # The main function.
  94. function fMain()
  95. {
  96.   case "${ARG1}"
  97.   in
  98.     usage)
  99.       fUsage
  100.       ;;
  101.     daily)
  102.       BACKUP=daily
  103.       fBackup
  104.       ;;
  105.     hourly)
  106.       BACKUP=hourly
  107.       fBackup
  108.       ;;
  109.     *)
  110.       fUsage
  111.       exit 1
  112.       ;;
  113.   esac
  114.  
  115.   return 0
  116. }
  117.  
  118.  
  119. # Start the program:
  120. fMain "${@}"
  121.  
  122. # Exit with previous return code:
  123. exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment