backup-mysql-script 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. # Shell script to backup MySql database
  3. # To backup Nysql databases file to /backup dir and later pick up by your
  4. # script. You can skip few databases from backup too.
  5. # For more info please see (Installation info):
  6. # http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
  7. # Last updated: Aug - 2005
  8. # --------------------------------------------------------------------
  9. # This is a free shell script under GNU GPL version 2.0 or above
  10. # Copyright (C) 2004, 2005 nixCraft project
  11. # Feedback/comment/suggestions : http://cyberciti.biz/fb/
  12. # -------------------------------------------------------------------------
  13. # This script is part of nixCraft shell script collection (NSSC)
  14. # Visit http://bash.cyberciti.biz/ for more information.
  15. # -------------------------------------------------------------------------
  16. MyUSER="root" # USERNAME
  17. MyPASS="password" # PASSWORD
  18. MyHOST="localhost" # Hostname
  19. OURREMOTEUSER="backuper"
  20. OURREMOTEHOST="cast.usic.org.ua"
  21. OURREMOTEDIR="~/backups/mysql"
  22. #OURREMOTEDIR="172.16.200.2:/home/user/backups"
  23. # Linux bin paths, change this if it can't be autodetected via which command
  24. MYSQL="$(which mysql)"
  25. MYSQLDUMP="$(which mysqldump)"
  26. CHOWN="$(which chown)"
  27. CHMOD="$(which chmod)"
  28. XZ="$(which xz)"
  29. # Backup Dest directory, change this if you have someother location
  30. DEST="/tmp/"
  31. # Main directory where backup will be stored
  32. MBD="$DEST/mysql"
  33. MES="$MBD/backup.log"
  34. # Get hostname
  35. HOST="$(hostname)"
  36. # Get date in dd-mm-yyyy format
  37. NOW="$(date +"%d-%m-%Y")"
  38. # File to store current backup file
  39. FILE=""
  40. # Store list of databases
  41. DBS=""
  42. # DO NOT BACKUP these databases
  43. IGGY="test information_schema UsicManagementSystem advus banor beaverdb elfy elfydb fg mantis oldsite courses tek wiki usictube"
  44. [ ! -d $MBD ] && mkdir -p $MBD || :
  45. # Only root can access it!
  46. #$CHOWN 0.0 -R $DEST
  47. #$CHMOD 0600 $DEST
  48. # Get all database list first
  49. DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
  50. ssh $OURREMOTEUSER@$OURREMOTEHOST "mkdir $OURREMOTEDIR/$NOW" > /dev/null 2>&1
  51. for db in $DBS
  52. do
  53. skipdb=-1
  54. if [ "$IGGY" != "" ];
  55. then
  56. for i in $IGGY
  57. do
  58. [ "$db" == "$i" ] && skipdb=1 || :
  59. done
  60. fi
  61. if [ "$skipdb" == "-1" ] ; then
  62. FILE="$MBD/$db.$HOST.$NOW.lzma"
  63. # do all inone job in pipe,
  64. # connect to mysql using mysqldump for select mysql database
  65. # and pipe it out to lzma file in backup dir :)
  66. $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $XZ --format=lzma -9 > $FILE
  67. echo "$NOW. Backup successfully done." >> $MES
  68. echo -e "Backup file: $FILE\n" >> $MES
  69. scp $FILE $OURREMOTEUSER@$OURREMOTEHOST:$OURREMOTEDIR/$NOW/ >/dev/null 2>&1
  70. if [ $? == 0 ]; then
  71. echo "Backup successfully copied to $OURREMOTEDIR" >> $MES
  72. # cleanup files
  73. rm -f $FILE
  74. else
  75. echo "Failed to copy backup to $OURREMOTEDIR" >> $MES
  76. fi
  77. fi
  78. done