# crontab -l

  1. */15 * * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1 
  2. #每周日的2:01进行一次全备 
  3. 01 02 * * 0 /usr/local/bin/mysqlbakfull.sh  > /dev/null 2>&1 
  4. #每周一至六的2:01进行增量备份 
  5. 01 02 * * 1-6 /usr/local/bin/mysqlbak.sh  > /dev/null 2>&1 

# cat /usr/local/bin/mysqlbakfull.sh

  1. #!/bin/bash 
  2. #定义一年中的第几周 
  3. datestr=`date +%Y%m-%U` 
  4. #定义数据库备份目录 
  5. sqlbakdir=/opt/mysqlbak/$datestr 
  6. #数据库数据目录 
  7. mysqldir=/usr/local/mysql/data/; 
  8. #定义要拷贝的bin-log文件 
  9. a=`tail -n1 $mysqldir/mysql-bin.index |cut -c3-18` 
  10. #创建数据库备份目录 
  11. if [ ! -d "$sqlbakdir" ]; then 
  12. mkdir -p "$sqlbakdir" 
  13. fi 
  14. #全备数据到指定的目录中 
  15. /usr/local/mysql/bin/mysqldump --opt -uroot -p'password' dbname > $sqlbakdir/dbname.sql 
  16. #全备后可以删除不需要的bin-log文件,节省磁盘空间 
  17. /usr/local/mysql/bin/mysql -uroot -p'password' -e "PURGE BINARY LOGS TO '$a';"
  18. #/usr/local/mysql/bin/mysql -uroot -p'password' -e "PURGE BINARY LOGS BEFORE '$tadayis 02:01:00';"

# cat /usr/local/bin/mysqlbak.sh

  1. #!/bin/bash 
  2. datestr=`date +%Y%m-%U`; 
  3. #日期格式形如“201010080201” 
  4. datestr2=`date '+%Y%m%d%H%M'`; 
  5. mysqldir=/usr/local/mysql/data/; 
  6. sqlbakdir=/opt/mysqlbak/$datestr 
  7. cd $mysqldir 
  8. a=`tail -n1 $mysqldir/mysql-bin.index
  9. /usr/local/mysql/bin/mysqladmin -uroot -p'password' flush-logs 
  10. cp $a $sqlbakdir/mysql-bin.$datestr2 

最后再做个计划任务,将目录$datestr打包用ftp/ssh/rsync传输到异地