转自:海风的linux之路 
 
  最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维护的时候坐全备份,剩下每天做增量备份。  
 工作原理就是把每次完整备份的binlog 和postion取出,做增量备份的时候取当时的binlog和postion,使用mysqlbinlog 把这之间的数据读出到另一个文件。  
做增量备份,根据上面完整备份所获得的postion以及binlog 与服务器当前的postion和binlog做增量备份,备份后把当前的postion以及binlog 存到postion文件中,留坐下一次增量备份的其实点。  
vi  zl_backup.sh - #!/bin/sh
 
 - #####for zengliang backup########
 
 - DATE=`date +%Y%m%d`
 
 - OLDDATE=`date --date='10 days ago' +%Y%m%d`
 
 - BACK_DIR="/data/mysql2/"
 
 - FILE_DIR="/home/profiles/liuhaifeng"
 
 - startbinlog=`awk '{print $1}' $FILE_DIR/postion`
 
 - startpostion=`awk '{print $2}' $FILE_DIR/postion`
 
 - cd $FILE_DIR
 
 -    mysql -uroot -p123456 -S /tmp/mysql.sock3306 -h 192.168.16.3 -e "show master status\G;"|awk '{print $2}' > nowpostion
 
 - stopbinlog=`sed -n '3p' $FILE_DIR/nowpostion`
 
 - stoppostion=`sed -n '4p' $FILE_DIR/nowpostion`
 
 - if [ "$startbinlog" == "$stopbinlog" ]; then
 
 -        mysqlbinlog --start-position=$startpostion --stop-position=$stoppostion $BACK_DIR$startbinlog >> ch_zlback_$DATE.sql
 
 - else
 
 -      startline=`awk "/$startbinlog/{print NR}" $BACK_DIR/mysql-bin-bj1.index`
 
 -      stopline=`wc -l $BACK_DIR/mysql-bin-bj1.index |awk '{print $1}'`
 
 -      for i in `seq $startline $stopline`
 
 -      do
 
 -       binlog=`sed -n "$i"p  $BACK_DIR/mysql-bin-bj1.index |sed 's/.\///g'`
 
 -       case "$binlog" in
 
 -         "$startbinlog")
 
 -                    mysqlbinlog --start-position=$startpostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
 
 -                    ;;
 
 -         "$stopbinlog")
 
 -                    mysqlbinlog --stop-position=$stoppostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
 
 -                    ;;
 
 -                     *)
 
 -                    mysqlbinlog $BACK_DIR$binlog >> ch_zlback_$DATE.sql
 
 -        esac
 
 -      done
 
 - fi
 
  复制代码 
####for ftp###### 
 - HOST="192.168.16.1"
 
 - USER="user"
 
 - PASSWD="password"
 
 - FTP_DIR="database"
 
 - ftp_db()
 
 - {
 
 - ftp -n << ! >/dev/null 2>&1 &
 
 - open $HOST
 
 - user $USER $PASSWD
 
 - binary
 
 - prompt
 
 - cd $FTP_DIR
 
 - put $1
 
 - bye
 
 - !
 
 - echo "sql backup suecss!!" 
 
 - }
 
 - if [ -f ch_zlback_$DATE.sql ];then
 
 -     tar czf ch_zlback_$DATE.tar.gz ch_zlback_$DATE.sql
 
 -     sleep 3
 
 -     ftp_db ch_zlback_$DATE.tar.gz
 
 -     echo "$stopbinlog $stoppostion" > $FILE_DIR/postion
 
 -     rm -rf ch_zlback_$OLDDATE.sql ch_zlback_$OLDDATE.tar.gz
 
 - else 
 
 -    echo "$DATE backup fail!!!!" 
 
 - fi
 
  复制代码三、做好计划任务 把增量备份脚本 和 完全备份脚本按照想要的时间写在计划任务中,做定时的增量备份。 当然还原的时候需要按照顺序依次还原。  
 |