设为首页 收藏本站
查看: 2344|回复: 0

[经验分享] mysql 做增量备份

[复制链接]

尚未签到

发表于 2018-9-27 10:05:47 | 显示全部楼层 |阅读模式
  首先在这里我要感谢我的同事 @mamiya_c3 哥的指教。。。QQQ
  最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维护的时候坐全备份,剩下每天做增量备份。
  工作原理就是把每次完整备份的binlog 和postion取出,做增量备份的时候取当时的binlog和postion,使用mysqlbinlog 把这之间的数据读出到另一个文件。
  注:本文中可能有个别地方会有些纰漏,请大家自行调试,因为下面的脚本是我用在真实环境中copy过来的,只是临时改了里面个别的参数,例如文件夹位置,密码等。。。。如有问题敬请谅解
  一、完整备份
  vi full_mysqldump.sh
  #!/bin/sh
  ###########
  #########
  #########DIR_INFO############
  date=`date +%Y%m%d`
  BACK_DIR="/home/profiles/liuhaifeng/fullbackup"
  FILE_DIR="/home/profiles/liuhaifeng"
  #############################3MYSQL_BACK#########################
  if [ ! -d $BACK_DIR$date ];then
  mkdir -p $BACK_DIR$date
  fi
  /usr/local/mysql/bin/mysql -uroot -p'123456' -h 127.0.0.1 -P 3306 -e "FLUSH TABLES WITH READ LOCK"
  /usr/local/mysql/bin/mysqldump -uroot -p'123456' -h 127.0.0.1 -P 3306 --default-character-set=gbk --opt --triggers -R --hex-blob --flush-logs --master-data=2 --all-databases > $BACK_DIR$date/fullbackup.sql
  /usr/local/mysql/bin/mysql -u root -p'123456' -h 127.0.0.1 -P 3306 -e "UNLOCK TABLES"
  ##########################
  ################get postion###############
  sed -n "22p" a.sql | awk -F'=|,|;' '{print $2,$4}' > $FILE_DIR/postion
  ################# FTP TO 16.1 ###############
  ################# FTP    INFO ###############
  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!!"
  }
  ##############################################
  #####################TRANSFER INFL#############
  cd $BACK_DIR$date
  if [ ! -f fullbackup.sql ]; then
  echo "mysqldump back file faild !!! please check"
  exit 1
  fi
  /bin/tar zcf fullbackup_$date.tar.gz fullbackup.sql
  sleep 5
  ftp_db fullbackup_$date.tar.gz
  二、做增量备份,根据上面完整备份所获得的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
  三、做好计划任务
  把增量备份脚本 和 完全备份脚本按照想要的时间写在计划任务中,做定时的增量备份。
  当然还原的时候需要按照顺序依次还原。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602663-1-1.html 上篇帖子: 95.更改MySQL的root用户密码,MySQL基本操作的常用命令 下篇帖子: MySQL 常见错误代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表