innobackupex自動備份腳本(增量備份,自動壓縮)


#!/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} --no-lock  --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} --no-lock  --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 increment tar.gzdb 目錄

再config目錄中包含3306.cnf為配置文件 tar.log文件記錄壓縮記錄

config文件包含當前備份文件名和全備份文件名,內容如下:

backup_full=back_27-10-2015
backup_pre_name=/incremental/back_28-10-2015

然后再crontab中配置每天晚上9點定時執行腳本即可

 

腳本備份說明

第一次執行為全備份,接下來六天為增量備份,下一次循環前會把全量和增量壓縮移動到tar.gzdb文件夾中然后進行下一個周期

如果有不足的地方希望大家不吝賜教

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM