mysql自動化(全量+增量)備份指令碼

來源:互聯網
上載者:User

標籤:mysql   自動化備份   

#!/bin/bash#At Sunday, we will backup the completed databases and the incresed binary log during Saturday to Sunday.#In other weekdays, we only backup the increaing binary log at that day!#################################the globle variables for MySQL#################################DB_USER=‘root‘DB_PASSWORD=‘123456‘DB_PORT=‘3306‘BACKUPDIR=‘/tmp/mysqlbakup‘BACKUPDIR_OLDER=‘/tmp/mysqlbakup_older‘DB_PID=‘/data/mysql/log/mysqld.pid‘LOG_DIR=‘/data/mysql/log‘BACKUP_LOG=‘/tmp/mysqlbakup/backup.log‘DB_BIN=‘/usr/local/mysql/bin‘#time variables for completed backupFULL_BAKDAY=‘Sunday‘TODAY=`date +%A`DATE=`date +%Y%m%d`############################time variables for binlog#############################liftcycle for saving binlog DELETE_OLDLOG_TIME=$(date "-d 14 day ago" +%Y%m%d%H%M%S)#The start time point to backup binlog, the usage of mysqlbinlog is --start-datetime、--stop-datetime, time format is %Y%m%d%H%M%S, eg:20170502171054, time zones is  [start-datetime, stop-datetime)#The date to start backup binlog is yesterday at this very moment!START_BACKUPBINLOG_TIMEPOINT=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")BINLOG_LIST=`cat /data/mysql/log/mysql-bin.index`###############################################Judge the mysql process is running or not.  ##mysql stop return 1, mysql running return 0.###############################################function DB_RUN(){    if test -a $DB_PID;then        return 0    else        return 1    fi}####################################################################################################Judge the bacup directory is exsit not.                                                          ##If the mysqlbakup directory was exsited, there willed return 0.                                  ## If there is no a mysqlbakup directory, the fuction will create the directory and return value 1.####################################################################################################function BACKDIR_EXSIT(){    if test -d $BACKUPDIR;then        echo "$BACKUPDIR is exist"        return 0    else        echo "$BACKUPDIR is not exist, now create it"        mkdir -pv $BACKUPDIR         return 1    fi}####################################################The full backup for all Databases                ##This function is use to backup the all databases.####################################################function FULL_BAKUP(){    echo "At `date +%D\ %T`, starting backup the MySQL DB ... "    rm -fr $BACKUPDIR/db_fullbak_$DATE.sql  #for test !!    $DB_BIN/mysqldump --lock-all-tables --flush-logs --master-data=2 -u$DB_USER -p$DB_PASSWORD -P$DB_PORT -A |gzip > $BACKUPDIR/db_fullbak_$DATE.sql.gz    FULL_HEALTH=`echo $?`    if [[ $FULL_HEALTH == 0 ]];then        echo "At `$(date +"%y-%m-%d %H:%M:%S")`, MySQL DB full backup successfully!"    else        echo "MySQL DB full backup failed!"    fi}#python# >>> with open(‘/data/mysql/log/mysql-bin.index‘,‘r‘) as obj:# ...    for i in obj:# ...       print os.path.basename(i)  # ... # mysql-bin.000006# mysql-bin.000007# mysql-bin.000008# mysql-bin.000009function INCREASE_BAKUP(){    echo "At `date +%D\ %T`, starting backup the MySQL DB ... "    $DB_BIN/mysqladmin -u$DB_USER -p$DB_PASSWORD -P$DB_PORT flush-logs    $DB_BIN/mysql -u$DB_USER -p$DB_PASSWORD -P$DB_PORT -e "purge master logs before ${DELETE_OLDLOG_TIME}"      for i in $BINLOG_LIST    do        $DB_BIN/mysqlbinlog -u$DB_USER -p$DB_PASSWORD -P$DB_PORT --start-datetime="$START_BACKUPBINLOG_TIMEPOINT" $i |gzip >> $BACKUPDIR/db_daily_$DATE.sql.gz     done    # $DB_BIN/mysqlbinlog -u$DB_USER -p$DB_PASSWORD -P$DB_PORT --start-datetime="$START_BACKUPBINLOG_TIME" $LOG_DIR/mysql-bin.[0-9]* |gzip >> $BACKUPDIR/db_daily_$DATE.sql.gz    INCREASE_HEALTH=`echo $?`    if [[ $INCREASE_HEALTH == 0 ]];then        echo "At `$(date +"%y-%m-%d %H:%M:%S")`, MySQL DB incresed backup successfully!"    else        echo "MySQL DB incresed backup failed!"    fi}function BAKUP_CLEANER(){    if test -d $BACKUPDIR_OLDER;then        echo "$BACKUPDIR_OLDER is exist"#        return 0    else        echo "$BACKUPDIR_OLDER is not exist, now create it"        mkdir -pv $BACKUPDIR_OLDER #        return 1    fi    find $BACKUPDIR -name "*.sql.gz" -mtime +7 -exec mv {} $BACKUPDIR_OLDER \;#    find $BACKUPDIR_OLDER -name "*.sql.gz" -mtime +14 -exec rm -fr {} \;    }#####################################--------------main----------------#####################################function MAIN(){    DB_RUN    Run_process=`echo $?`    if [[ $Run_process == 0 ]];then        echo "-----------START------------"        echo $(date +"%y-%m-%d %H:%M:%S")        echo "-----------------------"        if [[ $TODAY == $FULL_BAKDAY ]];then            echo "Start completed bakup ..."            BACKDIR_EXSIT             FULL_BAKUP    #full backup to all DB            INCREASE_BAKUP         else             echo "Start increaing bakup ..."            BACKDIR_EXSIT             INCREASE_BAKUP        fi        BAKUP_CLEANER         echo "-----------------------"        echo $(date +"%y-%m-%d %H:%M:%S")        echo "-----------END------------"    else        echo "MySQL is stopped, the db can not be bacuped!"     fi}#starting runingMAIN >> $BACKUP_LOG

本文出自 “LINUX” 部落格,請務必保留此出處http://wangpengtai.blog.51cto.com/3882831/1920594

mysql自動化(全量+增量)備份指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.