• innobackupex 单脚本循环7天一全备6增备脚本更新


    #!/bin/bash
    
    #日期转为天数
    function date2days {
        echo "$*" | awk '{
            z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
            j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
            print j
        }'
    }
    
    #说明:脚本执行策略为每天执行一次,执行前需要先建立config文件,并在config文件
    #中添加
    #backup_full=
    #backup_pre_name=
    #即可,注意路径。
    #备份策略,每七天一个循环,第一天为全备份,第二天至第六天为增量备份。
    #后续会增加已备份文件压缩转移定期删除部分 
    
    
    #######################
    db_user="xtrabackup"
    db_passwd="mysQlbackup"
    db_defaults_file="/home/backup/config/3306.cnf"
    db_socket="/var/lib/mysql/mysql_3306.sock"
    db_backup="/home/backup/"
    db_backup_fulldir="/home/backup/full/"
    db_backup_incrementaldir="/home/backup/incremental/"
    db_backup_gzfull="/home/backup/gzip/"
    db_backup_tarfull="/home/backup/tar.gzdb/"
    rm_num=7
    
    #用于压缩并转移源文件
    move_and_tar (){
    if [ $# != 1 ]; then
            echo "参数不正确"
            exit 0
    fi
    
    time_rm=`date -d "$1 days ago" +"back_%d-%m-%Y"`
    
    if [ $1 -eq 7 ]; then
            if [ -d ${db_backup_fulldir}${time_rm} ]; then
                    su - root -c  "tar -czPvf ${db_backup_tarfull}${time_rm}_full.tar.gz ${db_backup_fulldir}${time_rm}"
                    su - root -c  "rm -rf ${db_backup_fulldir}${time_rm}"
                    echo "压缩目录rm $db_backup_fulldir${time_rm}" >>/home/backup/config/tar.log
            fi
    fi
    
    if [ $1 -gt 0 -a $1 -lt 7 ]; then
            if [ -d $db_backup_incrementaldir${time_rm} ]; then
                    su - root -c  "tar -czPvf ${db_backup_tarfull}${time_rm}_increment.tar.gz ${db_backup_incrementaldir}${time_rm}"
                    su - root -c  "rm -rf ${db_backup_incrementaldir}${time_rm}"
                    echo "压缩目录rm $db_backup_incrementaldir${time_rm}" >>/home/backup/config/tar.log
            fi
    fi
    }
    
    #得到当前时间和配置文件
    time="$(date +"back_%d-%m-%Y")"
    source /home/backup/config/config
    
    #计算今天到上次全备份相隔天数
    _Day=$(date2days `echo ${backup_full:5:10}|awk 'BEGIN{FS="-"}{print $3,$2,$1}'`)
    Day=$(date2days `date +"%Y %m %d"`)
    echo $_Day
    echo $Day
    let result=$Day-$_Day
    echo "相差$result天"
    
    if [ -z ${backup_full} ] || [ $result -ge 7  ] ; then
    #todo
    echo '全备份'
    backup_full=${time}
    innobackupex --defaults-file=$db_defaults_file --no-timestamp --user=${db_user} --password=${db_passwd}  --socket=$db_socket ${db_backup_fulldir}${backup_full}/
        
    if [ $? -eq 0 ]; then
            echo "${time} 备份成功!!!" >> /home/backup/config/results.log
        else
            echo "${time} 备份失败???" >> /home/backup/config/results.log
        fi
    
    #更新配置文件
    echo "backup_full=${backup_full}" >/home/backup/config/config
    echo "backup_pre_name=full/${backup_full}" >>/home/backup/config/config
    
    #自动删除两周以前的备份文件
    while [ ${rm_num} -lt 8 -a ${rm_num} -gt 0 ]
    do
    move_and_tar ${rm_num}
    rm_num=`expr ${rm_num} - 1`
    done
    
    echo '全备份'
    else
    #todo
    echo '增量备份'
    
    innobackupex  --defaults-file=$db_defaults_file --socket=$db_socket --no-timestamp --user=${db_user} --password=${db_passwd}  --incremental ${db_backup_incrementaldir}${time}/ --incremental-basedir=${db_backup}${backup_pre_name}
    
    if [ $? -eq 0 ]; then
                    echo "${time} 增量备份成功!!!" >> /home/backup/config/results.log
            else
                    echo "${time} 增量备份失败???" >> /home/backup/config/results.log
            fi
    
    
    #更新配置文件
    echo "backup_full=${backup_full}" >/home/backup/config/config
    echo "backup_pre_name=incremental/${time}" >>/home/backup/config/config
    echo '增量备份'
    fi

    脚本目录详细说明

    备份主目录 /home/backup :

    config(文件夹)  full(文件夹)  incremental(文件夹)  mysql_back.sh(脚本)  tar.gzdb(压缩后的备份)

    config文件夹目录下:

    3306.cnf(从/etc/my.cnf复制过来的配置文件)  config(用于脚本读取判断全备还是增备日期)  results.log(结果日志)  tar.log(压缩日志)

    config文件内容如下:

    backup_full=back_24-03-2016
    backup_pre_name=incremental/back_27-03-2016

    第一次使用配置为

    backup_full=

    backup_pre_name=

    即可

    以上目录可以根据自己需要修改,脚本日志没有记录,一般我去/var/spool/mail/root 查看

    tar.gz文件夹具体备份截图:

  • 相关阅读:
    SpringCloud就是分布式啊?!?!?!
    有没有可能让运算符作为函数参数?
    【问题】用C++结构体实现顺序表,数据超过数组长度后,表长自动+1
    数学模型与数据结构的丝连
    最浅显易懂的数据库索引讲解
    whois 信息
    旁站C段查询
    网络搜索引擎
    服务指纹识别
    绕过CDN查找ip方法总结
  • 原文地址:https://www.cnblogs.com/jiangwenju/p/5330031.html
Copyright © 2020-2023  润新知