MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2514|回复: 0
打印 上一主题 下一主题

mysql 全备+binlog 自动恢复shell脚本

[复制链接]
跳转到指定楼层
1#
发表于 2013-2-20 10:21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、数据库全备的命名规则 bak_dbname_xxx_sql
2、BAKUPDIR 存放所有的数据全备的文件的目录
3、BINLOGBAKDIR 用与存放所有用到的binlog的目录
  1. #!/bin/bash
  2. BASEDIR=/data1/xxx/xxx/backuptest
  3. BAKUPDIR=$BASEDIR/tmpbak
  4. #BAKUPDIR=$BASEDIR/2012-03-27
  5. BINLOGBAKDIR=$BASEDIR/binlog
  6. LOGDIR=$BASEDIR/log
  7. RECOVERY_LOG=$LOGDIR/recovery.log
  8. MYSQL=/usr/local/mysql/bin/mysql
  9. MYSQLBINLOG=/usr/local/mysql/bin/mysqlbinlog
  10. USER=root
  11. PASS=123
  12. MYSQLIP=localhost

  13. mkdir -p $LOGDIR
  14. BAKUPSQL=`find $BAKUPDIR -type f -name "*sql" |xargs -i basename {}`

  15. for i in $BAKUPSQL
  16. do
  17.         cd $BAKUPDIR

  18. #########CHECK BINLOG POSITION############
  19.         BINLOG=`head -n 50 $i |grep "CHANGE MASTER TO MASTER_LOG_FILE"|awk -F "'" '{print $2}'`
  20.         BINLOGPOS=`head -n 50 $i |grep "CHANGE MASTER TO MASTER_LOG_FILE"|awk -F "=" '{print $3}'|sed 's/;//'`
  21.         DATABASE=`echo $i|awk -F"_" '{print $2}'`
  22. # echo $i $DATABASE $BINLOG $BINLOGPOS

  23. ####BEGINE FULLBAKUP RECOVERY#############
  24.         echo "#`date +'%Y-%m-%d %H:%M:%S'`: start recover $DATABASE " >> ${RECOVERY_LOG}
  25.         if $MYSQL -h$MYSQLIP -u$USER -p$PASS < $i >> ${RECOVERY_LOG} 2>&1;then
  26.                 echo "recovery $DATABASE sucessfully" >> ${RECOVERY_LOG}
  27.         else
  28.                 echo "recovery $DATABASE fail" >> ${RECOVERY_LOG}
  29.                 exit;
  30.         fi
  31.         echo "#`date +'%Y-%m-%d %H:%M:%S'`: end recover $DATABASE" >> ${RECOVERY_LOG}


  32. #####BEGINE BINLOGBAKUP RECOVERY##########

  33.         cd $BINLOGBAKDIR
  34.         find . -type f -name "*bin*" |xargs -i basename {} > /tmp/binlog.tmp
  35.         sort -n /tmp/binlog.tmp > $LOGDIR/binlog.tmp2
  36.         sed '/md5/d' $LOGDIR/binlog.tmp2 > $LOGDIR/binlog.tmp3
  37.         sed -n "/$BINLOG/,\$p" $LOGDIR/binlog.tmp3 > $LOGDIR/binlog${DATABASE}.log
  38.         RECBINLOGS=`awk '{printf "%s"," "$1}' $LOGDIR/binlog${DATABASE}.log `
  39.         #echo $DATABASE $BINLOGPOS $RECBINLOGS

  40.         echo "#`date +'%Y-%m-%d %H:%M:%S'`: start recover $DATABASE binlog " >> ${RECOVERY_LOG}
  41.         echo " $MYSQLBINLOG --no-defaults --disable-log-bin --start-position=$BINLOGPOS $RECBINLOGS -d $DATABASE |$MYSQL -h$MYSQLIP -u$USER -p$PASS -f " >> ${RECOVERY_LOG}
  42.         if $MYSQLBINLOG --no-defaults --disable-log-bin --start-position=$BINLOGPOS $RECBINLOGS -d $DATABASE |$MYSQL -h$MYSQLIP -u$USER -p$PASS -f >> ${RECOVERY_LOG} 2>&1;then
  43.                 echo "recover $DATABASE binlog sucessfully" >> ${RECOVERY_LOG}
  44.         else
  45.                 echo "recover $DATABASE binlog fail" >> ${RECOVERY_LOG}
  46.                 exit;
  47.         fi
  48.         echo "#`date +'%Y-%m-%d %H:%M:%S'`:end recover $DATABASE binlog" >> ${RECOVERY_LOG}


  49. done
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-2 06:35 , Processed in 0.065122 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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