找回密码
 注册摩迷

QQ登录

只需一步,快速开始

搜索
关闭

站长推荐

手机客户端
亲,还没下载论坛手机客户端?跟上潮流做时尚达人。掌中乐趣无处不在,快点下载吧。

查看 »

查看: 4409|回复: 0
打印 上一主题 下一主题

mysql 做增量备份

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-23 15:17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转自:海风的linux之路

  最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维护的时候坐全备份,剩下每天做增量备份。


工作原理就是把每次完整备份的binlog 和postion取出,做增量备份的时候取当时的binlog和postion,使用mysqlbinlog 把这之间的数据读出到另一个文件。


做增量备份,根据上面完整备份所获得的postion以及binlog 与服务器当前的postion和binlog做增量备份,备份后把当前的postion以及binlog 存到postion文件中,留坐下一次增量备份的其实点。


vi  zl_backup.sh

  1. #!/bin/sh
  2. #####for zengliang backup########
  3. DATE=`date +%Y%m%d`
  4. OLDDATE=`date --date='10 days ago' +%Y%m%d`
  5. BACK_DIR="/data/mysql2/"
  6. FILE_DIR="/home/profiles/liuhaifeng"
  7. startbinlog=`awk '{print $1}' $FILE_DIR/postion`
  8. startpostion=`awk '{print $2}' $FILE_DIR/postion`
  9. cd $FILE_DIR
  10.    mysql -uroot -p123456 -S /tmp/mysql.sock3306 -h 192.168.16.3 -e "show master status\G;"|awk '{print $2}' > nowpostion
  11. stopbinlog=`sed -n '3p' $FILE_DIR/nowpostion`
  12. stoppostion=`sed -n '4p' $FILE_DIR/nowpostion`
  13. if [ "$startbinlog" == "$stopbinlog" ]; then
  14.        mysqlbinlog --start-position=$startpostion --stop-position=$stoppostion $BACK_DIR$startbinlog >> ch_zlback_$DATE.sql
  15. else
  16.      startline=`awk "/$startbinlog/{print NR}" $BACK_DIR/mysql-bin-bj1.index`
  17.      stopline=`wc -l $BACK_DIR/mysql-bin-bj1.index |awk '{print $1}'`
  18.      for i in `seq $startline $stopline`
  19.      do
  20.       binlog=`sed -n "$i"p  $BACK_DIR/mysql-bin-bj1.index |sed 's/.\///g'`
  21.       case "$binlog" in
  22.         "$startbinlog")
  23.                    mysqlbinlog --start-position=$startpostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
  24.                    ;;
  25.         "$stopbinlog")
  26.                    mysqlbinlog --stop-position=$stoppostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
  27.                    ;;
  28.                     *)
  29.                    mysqlbinlog $BACK_DIR$binlog >> ch_zlback_$DATE.sql
  30.        esac
  31.      done
  32. fi
复制代码


####for ftp######

  1. HOST="192.168.16.1"
  2. USER="user"
  3. PASSWD="password"
  4. FTP_DIR="database"
  5. ftp_db()
  6. {
  7. ftp -n << ! >/dev/null 2>&1 &
  8. open $HOST
  9. user $USER $PASSWD
  10. binary
  11. prompt
  12. cd $FTP_DIR
  13. put $1
  14. bye
  15. !
  16. echo "sql backup suecss!!"
  17. }
  18. if [ -f ch_zlback_$DATE.sql ];then
  19.     tar czf ch_zlback_$DATE.tar.gz ch_zlback_$DATE.sql
  20.     sleep 3
  21.     ftp_db ch_zlback_$DATE.tar.gz
  22.     echo "$stopbinlog $stoppostion" > $FILE_DIR/postion
  23.     rm -rf ch_zlback_$OLDDATE.sql ch_zlback_$OLDDATE.tar.gz
  24. else
  25.    echo "$DATE backup fail!!!!"
  26. fi
复制代码

三、做好计划任务

把增量备份脚本 和 完全备份脚本按照想要的时间写在计划任务中,做定时的增量备份。

当然还原的时候需要按照顺序依次还原。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
快速回复 返回顶部 返回列表