作者:coralzd      网址  www.freebsdsystem.org/mysqlhotcopy_backup/  转载注明出处

下面共享一个一直在线上运行一年多的mysql备份脚本。
  mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库目录所在的机器上。mysqlhotcopy只用于备份MyISAM。它运行在Unix和NetWare中。

 

  1. #!/usr/bin/env bash  
  2. DATE=`date +%y%m%d.%H`  
  3. DATADIR="/data0/mysql/data" 
  4. BACKDIR_DAILY="/data0/local/mysqld/daily" 
  5. BACKDIR_HOURLY="/data0/local/mysqld/hourly" 
  6. INTERVAL="$1" 
  7. TMPDIR="/var/tmp/" 
  8. TMPDIRH="$TMPDIR"hourly 
  9. TMPDIRD="$TMPDIR"daily 
  10. LOGDIR="/data0/log/dbbackup/" 
  11. KEEPH_LOCAL=1 
  12. USER=hotcopy 
  13. PASSWD=hotcopy 
  14. KEEPH_NFS=7 
  15. KEEPD_LOCAL=3 
  16. KEEPD_NFS=14 
  17. HOST=`hostname -s`  
  18. MYVERSION="5.1"   
  19.  
  20. mkdir -p $LOGDIR  
  21. case $INTERVAL in  
  22. hourly | HOURLY | Hourly | 1 )  
  23. echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  
  24. echo "Performing HOURLY level backup -- `date +$m-$d.%H:%M:%S`" && echo ""  
  25. echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >>"$LOGDIR"hourly.log  
  26. echo "Performing HOURLY level backup -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"hourly.log  
  27. mkdir -p $TMPDIRH  
  28. mkdir -p $BACKDIR_HOURLY  
  29. /usr/local/mysql/bin/mysqlhotcopy --allowold test -u $USER -p $PASSWD $TMPDIRH > /dev/null  
  30. echo "" && echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  
  31. echo "Compressing -- `date +$m-$d.%H:%M:%S`"  
  32. echo "Compressing -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"hourly.log  
  33. cd $TMPDIRH  
  34. find . -maxdepth 1 -type d -user mysql -exec tar czf {}-"$DATE".tar.gz '{}' \;  
  35. find . -maxdepth 1 -type d -user mysql -exec rm -rf {} \;  
  36.  
  37. echo ""  
  38. echo "Copying Local... -- `date +$m-$d.%H:%M:%S`"  
  39. echo "Copying Local... -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"hourly.log  
  40. chattr -i $BACKDIR_HOURLY  
  41. find $BACKDIR_HOURLY -type f -mtime +7 -exec rm {} \;  
  42. mv * $BACKDIR_HOURLY  
  43. chattr +i $BACKDIR_HOURLY  
  44.  
  45. echo ""  
  46. echo "Moving NFS... -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"hourly.log  
  47. echo "Ending -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"hourly.log  
  48.  
  49. exit 0  
  50. ;;  
  51. daily | DAILY | Daily | 2 )  
  52. echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  
  53. echo "Performing DAILY level backup -- `date +$m-$d.%H:%M:%S`" && echo ""  
  54. echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >>"$LOGDIR"daily.log  
  55. echo "Performing DAILY level backup -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"daily.log  
  56. mkdir -p $TMPDIRD  
  57. mkdir -p $BACKDIR_DAILY  
  58. /usr/local/mysql/bin/mysqlhotcopy --allowold test -u $USER -p $PASSWD $TMPDIRD > /dev/null  
  59. echo "" && echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  
  60. echo "Compressing -- `date +$m-$d.%H:%M:%S`"  
  61. echo "Compressing -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"daily.log  
  62. cd $TMPDIRD  
  63. find . -maxdepth 1 -type d -user mysql -exec tar czf {}-"$DATE".tar.gz '{}' \;  
  64. find . -maxdepth 1 -type d -user mysql -exec rm -rf {} \;  
  65.  
  66. echo "Copying Local... -- `date +$m-$d.%H:%M:%S`"  
  67. echo "Copying Local... -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"daily.log  
  68. chattr -i $BACKDIR_DAILY  
  69. find $BACKDIR_DAILY -type f -mtime +$KEEPD_LOCAL -exec rm -rf '{}' \;  
  70. mv * $BACKDIR_DAILY  
  71. chattr +i $BACKDIR_DAILY  
  72.  
  73. echo "Ending -- `date +$m-$d.%H:%M:%S`" >>"$LOGDIR"daily.log  
  74. exit 0  
  75. ;;  
  76. * )  
  77. echo ""  
  78. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  
  79. echo "Invalid Selection" 1>&2  
  80. exit 1  
  81. esac  


将脚本置于crond中,在指定时间来运行。例如
 

  1. 0 23,00,01,02,03,04,06,07,08,17,18 * * * /usr/local/sbin/mysqlbackup.sh 2