• MySQL 增量备份shell


    #!/bin/bash
    #set -x
    Host=192.168.99.99
    Host2=192.168.99.77
    name=root
    pass=12346
    DATE=`date +"%Y%m%d-%H%M%S"`
    DELDATE=`date -d -1day +%Y%m%d`
    DELDATE2=`date -d -1day +%Y%m%d-%H`
    DELDATE3=`date -d -3day +%Y%m%d-%H`
    DELDATE4=`date -d -30day +%Y%m%d-%H`
    DELDATE5=`date -d -2day +%Y%m%d-%H`
    WAN_DIR="/data/wan_dir"
    ZENG_DIR="/data/zeng_dir"
    DATA_DIR="/data/data"
    MYSQL_BIN="/usr/local/mysql/bin"
    error_log="$WAN_DIR/backup_error_$DATE.log"
    backup_log="$ZENG_DIR/backup_$DATE.log"
    gzdumpfile="$DATE.sql.tar.gz"
    db="/var/log/backup_$DATE.txt"
    PASSWORD="P#6%IEd3qkW"
    cd $DATA_DIR
    rm -rf /var/log/backup_*.txt
    ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}' >>$db
    find $WAN_DIR -name "*$DELDATE2*.tar.gz"   -exec rm -rf {} ; >>/root/wan_log
    find $WAN_DIR -name "*$DELDATE3*.tar.gz" -exec rm -rf {} ; >>/root/wan_log
    find $ZENG_DIR -name "*$DELDATE2*.sql.tar.gz"  -exec rm -rf {} ; >>/root/zeng_log
    find $WAN_DIR -name "*$DELDATE5*.tar.gz" -exec rm -rf {} ; >>/root/wan_log

    function wan() {
    #检测完全备份目录是否存在,如果不存在就创建。
    if [ -d $WAN_DIR ]
    then
        echo "完全备份目录存在" >>$backup_log
    else
        echo "完全备份目录不存在,开始创建......."
        /bin/mkdir $WAN_DIR
    fi

    eMailFile="/root/mail.log"
    email=yedaihong@youkia.net
        echo "       " > $eMailFile
        echo "-----------------------" >> $eMailFile
        echo "`date +"%y-%m-%d %H:%M:%S"`" >> $eMailFile
        echo "-------------------------" >> $eMailFile
    cd $WAN_DIR
        for dbname in $(cat $db)
        do
           /usr/local/mysql/bin/mysqldump --flush-logs -u$name -p$pass --skip-lock-tables --quick $dbname > $dbname.sql
            if [ $? = 0 ]
            then
                 find $ZENG_DIR -name "*.log" -mtime +32 -exec rm {} ; >/dev/null 2>&1
                 cd $WAN_DIR
                 tar -zcvf $dbname.$gzdumpfile $dbname.sql
                 rm -rf ./*.sql
                 echo "$Host2 Backup MySQL succeed" >>$eMailFile
                 #mail -s "MySQL Backup" $email < $eMailFile
            else
                 echo "$Host2 Backup MySQL fail" >>$eMailFile
                 mail -s "$Host2 MySQL Backup fail" $email < $eMailFile
            fi
        done
    #完全备份后删除本地增量备份文件,只保留最近一个星期的增量备份文件

    #将备份好的上传到FTP服务器
    cd $WAN_DIR
    for db_back in $(cat $db)
    do
        ftp -nv $Host 2101 <<EOF
        user youkiaback "$PASSWORD"
        cd wan_dir
        binary
        put $db_back.$gzdumpfile
        mdelete $db_back.$DELDATE3*.tar.gz
        quit
    EOF
    done
    }
    function zeng() {
    /bin/mkdir /data/zeng_dir

    eMailFile="$ZENG_DIR/mail.log"
    email=yedaihong@youkia.net

    echo "       " > $eMailFile
    echo "-----------------------" >> $eMailFile
    echo "`date +"%y-%m-%d %H:%M:%S"`" >> $eMailFile
    echo "-------------------------" >> $eMailFile

    TIME=$(date "-d 10 day ago" +"%Y-%m-%d %H:%M:%S")
    #StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")
    StartTime=$(date "-d 1 hour ago" +"%Y-%m-%d %H:%M:%S")
    Start="--start-datetime"
    #删除10天前的二进制文件
    mysql -u$name -p$pass -e "purge master logs before ${TIME}" && echo "delete 10 days before log" | tee -a $eMailFile
    filename=`cat $DATA_DIR/mysql-bin.index | awk -F "/" '{print $2}'`
    cd $ZENG_DIR

    for i in $filename
    do
         echo "$StartTime start backup binlog" >> $eMailFile

         for db_name in $(cat $db)
         do
            /usr/local/mysql/bin/mysqlbinlog -u$name -p$pass -d $db_name $Start="$StartTime" $DATA_DIR/$i >>$db_name.$DATE.sql
            if [ $? = 0 ]
            then
                 tar -zcvf $db_name.$gzdumpfile $db_name.$DATE.sql
                 rm -rf ./*.sql
                 echo "Backup MySQL succeed" >>$eMailFile
                 #mail -s "MySQL Backup" $email < $eMailFile
            else
                 echo "$Host2 Backup MySQL fail" >>$eMailFile
                 mail -s "$Host2 MySQL Backup fail" $email < $eMailFile
            fi
         done
    done
    find $ZENG_DIR -name "*.log" -name +32 -exec rm {} ; >/dev/null 2>&1
    #删除上次备份的完整备份的文件

    #将备份好的上传到FTP服务器
    for db_back in $(cat $db)
    do
        ftp -nv $Host 2101 <<EOF
        user youkiaback "$PASSWORD"
        cd zeng_dir
        binary
        put $db_back.$gzdumpfile
        mdelete $db_back.$DELDATE3*.tar.gz
        quit
    EOF
    done
    }
    backfile=`ls -l /data/wan_dir/*.tar.gz | wc -l`
    if [ $backfile != 0 ]
    then
        echo "完整备份已经存在,现在进行增量备份"
        sleep 5
        zeng
    else
        echo "还没进行完整备份,现在进行完整备份"
        sleep 5
        wan
    fi

  • 相关阅读:
    HDU 4619 Warm up 2 (多校)
    深入浅出Node.js (9)
    HDU 1106 排序(排序)
    字符串相关心得
    HDU 2547 无剑无我(数学)
    HDU 2549 壮志难酬(字符串,处理小数点)
    HDU 2551 竹青遍野(循环,水)
    HDU 2552 三足鼎立(数学函数)
    HDU 2555 陷阱(模拟,结构体数组)
    HDU 2561 第二小整数(排序,水)
  • 原文地址:https://www.cnblogs.com/520qtf/p/8818514.html
Copyright © 2020-2023  润新知