Shell-xtrabackup script

20 篇文章 0 订阅
#!/bin/bash

##################################################################################
# purpose:xtrabackup script 
# version:v1.5
# date	 :2012-08-22
# author :kin zhang
##################################################################################

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

backupdate=`date +%Y%m%d`
scheduledate=`date +%a`
fullbackup_date=(Wed Sun)
incrementbackup_date=(Mon Tue Thu Sat Fri)
backup_base=/db/backup
fullbackup_path=fullbackup_${backupdate}
incrementbackup_path=increment_${backupdate}
fulllog=${backup_base}/log/full_${backupdate}.log
incrementlog=${backup_base}/log/incr_${backupdate}.log
expired_day=7
# check the log directory is exsited
function log_dir(){

#solution 1:
if [ -d ${backup_base}/log ]; then
	echo > /dev/null
	else
	mkdir -p /db/backup/log
fi

#solution 2:
# test -d ${backup_base}/log && echo > /dev/null || mkdir -p /db/backup/log
}

function mysql_fullbackup(){

log_dir

echo " mysql fullbackup begin at `date`" >>${fulllog}
echo "">>${fulllog}

# fullbackup 
innobackupex --slave-info --no-timestamp ${backup_base}/${fullbackup_path} 2>> ${fulllog}

echo "">>${fulllog}
echo " mysql fullbackup end at `date`" >>${fulllog}

cp /etc/my.cnf ${backup_base}/${fullbackup_path}/my.cnf.${backupdate}

grep "to_lsn" ${backup_base}/${fullbackup_path}/xtrabackup_checkpoints|awk '{print $3}' > /db/backup/lsn.log

# compress the backup files
tar zcvf ${backup_base}/${fullbackup_path}.tar.gz ${backup_base}/${fullbackup_path} &> /dev/null

generate_report
}

function mysql_incrementbackup(){

log_dir

echo " incrementbackup begin at `date`" >>${incrementlog}
echo "">>${incrementlog}

#incremental backup
innobackupex --no-timestamp --incremental-lsn=`cat ${backup_base}/lsn.log` \
--incremental ${backup_base}/${incrementbackup_path} 2>>${incrementlog}

##################################################################################
# increment backup option:
#   --incremental-basedir=/fullbackup directory 
#   --incremental-lsn=to_lsn get to_lsn from xtrabackup_checkpoints file
##################################################################################


echo "">>${incrementlog}
echo " incrementbackup end at `date`" >>${incrementlog}

# compress the backup files
tar zcvf ${backup_base}/${incrementbackup_path}.tar.gz ${backup_base}/${incrementbackup_path} &> /dev/null

generate_report

}


##################################################################################
# determine which backup type to be executed
##################################################################################

function schedule_job(){

# solution 1:
echo "${fullbackup_date[@]}"|grep -wq "${scheduledate}"\
&& mysql_fullbackup || mysql_incrementbackup

## solution 2: TBD
##for (( i=0;i<=${#fullbackup_date[@]};i++ ))
##do
##        if [[ ${scheduledate} = ${fullbackup_date[i]} ]];then
##                mysql_fullbackup
##        for (( i=0;i<=${incrementbackup_date[@]};i++ ))
##                do
##                if [[ ${scheduledate} = ${incrementbackup_date[i]} ]];then
##                        mysql_incrementbackup
##                fi
##                done
##        fi 
##done

}

function generate_report(){

# create the report dir
test -d ${backup_base}/report && echo > /dev/null \
|| mkdir -p ${backup_base}/report

#generate report

#determine the day whether in fullbackup loop
echo "${fullbackup_date[@]}"|grep -wq "${scheduledate}"

if [ $? -eq 0 ]; then
test -e ${backup_base}/fullbackup_${backupdate} && bak_size=`du -h ${backup_base}/fullbackup_${backupdate} |tail -1|awk '{print $1}'` ||\
 bak_size="No"

bak_status=`cat ${fulllog} |grep completed|grep -v 'prints'|awk '{print $4}'`
         if [ ! -n "${bak_status}" ] ;then
                 echo "${backupdate} ${bak_size} full Failed"\
                 >>${backup_base}/report/his.log
         else    
                 echo "${backupdate} ${bak_size} full ${bak_status}"\
                  >>${backup_base}/report/his.log
         fi
else 
test -e ${backup_base}/increment_${backupdate} && bak_size=`du -h ${backup_base}/increment_${backupdate} |tail -1|awk '{print $1}'` ||\
bak_size="No"

bak_status=`cat ${incrementlog} |grep completed|grep -v 'prints'|awk '{print $4}'`
	if [ ! -n "${bak_status}" ] ;then
		echo "${backupdate} ${bak_size} incremental Failed"\
		>>${backup_base}/report/his.log
	else
		echo "${backupdate} ${bak_size} incremental ${bak_status}"\
		 >>${backup_base}/report/his.log
	fi
fi

}

function purge_backup(){

# purge the backup files

#solution 1:
#backup_dir=`ls -p ${backup_base}|grep "/"|egrep "fullbackup|increment"`

#solution 2:
find ${backup_base} -maxdepth 1 -ctime +${expired_day} -type d|\
 egrep "fullbackup|increment" |xargs rm -rf {} \;

#solution 3:
#backup_dir=`find ${backup_base} -maxdepth 1 -ctime +${expired_day} -type d|egrep "fu#llbackup|increment"`
#for i in backup_dir
#do
#  rm -rf ${i}
#done

# purge the expired backup tar.gz files
find ${backup_base}/*.tar.gz -ctime ${expired_day} -exec rm {} \;

}

function sendmail(){
cat ${backup_base}/report/his.log|mail -v -s "backup report" kin.zhang@kinzhang.com
}

schedule_job
purge_backup
sendmail

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值