xtrabackup备份mysql

全量备份脚本

#!/bin/bash

## ------------------------------------------------------------------
## name         : backupdb_full.sh
## Description  : 数据库全量备份脚本
## Create_date  : 2020-01-07
## MODIFIED     : 2020-01-14添加备份传输至异地172.22.4.190的功能
##                2020-07-16将备份设置本地socket模式
##                2020-07-16去掉--no-lock确保数据的一致性
##                2020-07-17数据库信息改成配置获取形式,取消异地备份功能
##                2021-07-21重新改造,可以通过配置文件进行备份,
##                          设置了许多参数
## ------------------------------------------------------------------

#获取当前时间
curtime=`date +%Y%m%d`

#目录设置
backup_base_dir=/bak/db_backup
backup_data_dir=${backup_base_dir}/data
backup_log_dir=${backup_base_dir}/log
backup_confdir=${backup_base_dir}/etc
backup_scriptdir=${backup_base_dir}/script
mysql_confdir=/opt/mysql/etc

#文件设置
bakip=`/sbin/ifconfig|grep 'inet'|awk -F ' ' '{print $2}'|awk '{print $1}'|head -1`
backup_log=${backup_log_dir}/backup_`date +"%F_%T"`.log
backup_file=${bakip}_${curtime}
backup_conf_file=${backup_confdir}/config.ini
mysql_conf_file=/etc/my.cnf
full_offset=${backup_log_dir}/full.offset

#数据库信息
socket=`cat $mysql_conf_file |grep socket|awk -F '=' '{print $2}'|sort|tail -n 1`
dbuser='root'
dbpassword=`cat $mysql_confdir/.account.cnf 2>/dev/null|grep '^root:'|awk -F ':' '{print $2}'`

#创建日志目录
if [[ ! -d ${backup_base_dir} ]];then
    mkdir -p ${backup_base_dir}
fi

if [[ ! -d ${backup_data_dir} ]];then
    mkdir -p ${backup_data_dir}
fi

if [[ ! -d ${backup_log_dir} ]];then
    mkdir -p ${backup_log_dir}
fi

if [[ ! -d ${backup_confdir} ]];then
    mkdir -p ${backup_confdir}
fi

if [[ ! -d ${backup_scriptdir} ]];then
    mkdir -p ${backup_scriptdir}
    mv db_full_backup.sh ${backup_scriptdir}
	mv db_increment_backup.sh ${backup_scriptdir}
fi

if [[ ! -f ${backup_log} ]];then
    touch ${backup_log}
fi

if [[ ! -f ${backup_conf_file} ]];then
    touch ${backup_conf_file}
    #配置备份参数
    cat > ${backup_conf_file} << EOF
[xtrabackup]
user=$dbuser
password=$dbpassword
socket=$socket
defaults_file=$mysql_conf_file
parallel=1          #并发线程数,默认为1
compress=0          #是否开启压缩备份,0:不开启,1:开启
compress_threads=1  #压缩备份线程数,默认为1
galera_info=0       #galera集群建议开启,0:不开启,1:开启
slave_info=0        #主从模式,从库备份时建议开启,0:不开启,1:开启

[ftp]
ftp_ip=
ftp_user=  #ftp地址用户
ftp_pwd=   #ftp地址用户密码
ftp_port=  #ftp地址端口
ftp_dir=   #ftp目标目录
EOF
fi

if [[ ! -f ${full_offset} ]];then
    touch ${full_offset}
fi

#获取备份参数
echo -e "`date +"%F %T"` [Get Backup All Parameters]" >>${backup_log}
cat ${backup_conf_file} >>${backup_log}
username=`cat $backup_conf_file |grep -w 'user'|awk -F '=' '{print $2}'|sort|tail -n 1`
dbpwd=`cat $backup_conf_file |grep 'password'|awk -F '=' '{print $2}'|sort|tail -n 1`
socket=`cat $backup_conf_file |grep 'socket'|awk -F '=' '{print $2}'|sort|tail -n 1`
defaults_file=`cat $backup_conf_file |grep 'defaults_file'|awk -F '=' '{print $2}'|sort|tail -n 1`
parallel=`cat $backup_conf_file |grep 'parallel'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
compress=`cat $backup_conf_file |grep -w 'compress'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
compress_threads=`cat $backup_conf_file |grep 'compress_threads'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
galera_info=`cat $backup_conf_file |grep 'galera_info'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
slave_info=`cat $backup_conf_file |grep 'slave_info'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`

#获取ftp参数
ftp_ip=`cat $backup_conf_file |grep -w 'ftp_ip'|awk -F '=' '{print $2}'|sort|tail -n 1`
ftp_user=`cat $backup_conf_file |grep -w 'ftp_user'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
ftp_pwd=`cat $backup_conf_file |grep -w 'ftp_pwd'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
ftp_port=`cat $backup_conf_file |grep -w 'ftp_port'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
ftp_dir=`cat $backup_conf_file |grep -w 'ftp_dir'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`

#开始数据库全量备份
echo -e "`date +"%F %T"` [###开始xtrabackup全量备份###]" >>${backup_log}
#判断节点状态:单节点、主从、galera集群
if [ $galera_info = 0 ] && [ $slave_info = 0 ];then
    echo -e "`date +"%F %T"` [Note]:开启单节点模式备份" >>${backup_log}
    if [ $compress = 0 ];then
        echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
	    if [ $parallel = 1 ];then
	        echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
            /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp 2>>${backup_log} ${backup_data_dir}/${backup_file}
	    else
	        echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
	        /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    else
        echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
	    if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
	        echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
	        echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
	        echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
            /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}
	    elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
            echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    fi
elif [ $galera_info = 1 ] && [ $slave_info = 0 ];then
    echo -e "`date +"%F %T"` [Note]:开启Galera集群模式备份">>${backup_log}
    if [ $compress = 0 ];then
        echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
            /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info 2>>${backup_log} ${backup_data_dir}/${backup_file}
		else
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    else
		echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}
		elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --galera-info --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    fi
elif [ $galera_info = 0 ] && [ $slave_info = 1 ];then
    echo -e "`date +"%F %T"` [Note]:开启主从模式备份,备份目标为slave节点">>${backup_log}
    if [ $compress = 0 ];then
		echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info 2>>${backup_log} ${backup_data_dir}/${backup_file}
		else
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --parallel=$parallel 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    else
		echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --compress 2>>${backup_log} ${backup_data_dir}/${backup_file}
		elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --no-timestamp --slave-info --parallel=$parallel --compress --compress-threads=$compress_threads 2>>${backup_log} ${backup_data_dir}/${backup_file}
        fi
    fi
fi
#备份结果检查
g_bak_result=`tail -n 2 ${backup_log} |grep "completed OK"|wc -l`
if [ $g_bak_result =  1 ];then
    #是否启动异地备份
    echo -e "`date +"%F %T"` [Note]:full backup success!" >> ${backup_log}
    echo -e ${backup_file} >> ${full_offset}
    if [ ${#ftp_ip} != 0 ];then
        echo -e "`date +"%F %T"` [Note]:压缩备份文件:$backup_file">>${backup_log}
        cd $backup_data_dir
        backup_ftp=$ftp_dir
        backup_file_tar=${backup_file}.tar.gz
        tar zcf ${backup_file_tar} ${backup_file}
        echo -e "`date +"%F %T"` [Note]:压缩完成!">>${backup_log}
        echo -e "`date +"%F %T"` [Note]:上传备份文件$backup_file_tar$ftp_ip服务器">>${backup_log}
        _ftp_result=`ftp -v -n $ftp_ip<<EOF
user $ftp_user $ftp_pwd
put ${backup_data_dir}/${backup_file_tar} ${backup_ftp}/${backup_file_tar}
bye
EOF`
        echo ${_ftp_result} >> ${backup_log}
        echo -e "`date +"%F %T"` [Note]:删除压缩全量备份文件:$backup_file_tar">>${backup_log}
        rm -rf ${backup_data_dir}/${backup_file_tar}
        echo -e "`date +"%F %T"` [Note]:压缩全量备份文件$backup_file_tar删除成功!">>${backup_log}
    else
        echo -e "`date +"%F %T"` [Warning]:没有设置异地备份!">>${backup_log}
    fi
    echo -e "`date +"%F %T"` [Note]:清理半个月前的备份" >>${backup_log}
    for archfile in $(ls -l $backup_data_dir |awk '/^d/ {print $NF}');do
        file_date=`echo $archfile |awk -F '_' '{print $2}'`
        file_sec=`date +%s -d "$file_date"`
        bakdate_sec=`date +%s`
        num=$(((bakdate_sec-file_sec)/60/60/24))
        if [ $num -ge 14 ];then
            rm -rf $archfile
            echo -e "`date +"%F %T"` [Note]:$archfile备份保存超时被清除!">>${backup_log}
            sleep 1
        else
	    echo -e "`date +"%F %T"` [Note]:无可清理的备份!">>${backup_log}
        fi
    done
    echo -e "`date +"%F %T"` [Note]:数据库全量备份完成!" >> ${backup_log}
else
    echo -e "`date +"%F %T"` [Error]:full backup faild!" >> ${backup_log}
    echo -e "`date +"%F %T"` [Note]:删除错误备份文件:$backup_file">>${backup_log}
    rm -rf ${backup_data_dir}/${backup_file}
    echo -e "`date +"%F %T"` [Note]:错误备份文件$backup_file删除成功!">>${backup_log}
fi

增量备份脚本

#!/bin/bash
## ------------------------------------------------------------------
## name         : backupdb_incremental.sh
## Description  : 数据库增量备份脚本
## Create_date  : 2020-01-07
## MODIFIED     : 2020-01-14添加备份传输至异地172.22.4.190的功能
##                2020-07-16将备份设置本地socket模式
##                2020-07-16去掉--no-lock确保数据的一致性
##                2021-07-21重新改造,可以通过配置文件进行备份,
##                          设置了许多参数
## ------------------------------------------------------------------

#获取当前时间
curtime=`date +%Y%m%d`

#目录设置
backup_base_dir=/bak/db_backup
backup_data_dir=${backup_base_dir}/data
backup_log_dir=${backup_base_dir}/log
backup_confdir=${backup_base_dir}/etc
backup_scriptdir=${backup_base_dir}/script
mysql_confdir=/opt/mysql/etc

#文件信息
incremental_offset=`tail -n1 ${backup_log_dir}/full.offset`
backup_log=${backup_log_dir}/backup_`date +"%F_%T"`_incremental.log
backup_file=${incremental_offset}-${curtime}_incremental
backup_conf_file=${backup_confdir}/config.ini

#获取备份参数
if [[ ! -f ${backup_conf_file} ]];then
    echo -e "`date +"%F %T"` [Error]:备份配置文件不存在,退出!" >>${backup_log}
	exit 1
else
    echo -e "`date +"%F %T"` [Get Backup All Parameters]" >>${backup_log}
    cat ${backup_conf_file} >>${backup_log}
    username=`cat $backup_conf_file |grep -w 'user'|awk -F '=' '{print $2}'|sort|tail -n 1`
	dbpwd=`cat $backup_conf_file |grep 'password'|awk -F '=' '{print $2}'|sort|tail -n 1`
	socket=`cat $backup_conf_file |grep 'socket'|awk -F '=' '{print $2}'|sort|tail -n 1`
	defaults_file=`cat $backup_conf_file |grep 'defaults_file'|awk -F '=' '{print $2}'|sort|tail -n 1`
	parallel=`cat $backup_conf_file |grep 'parallel'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	compress=`cat $backup_conf_file |grep -w 'compress'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	compress_threads=`cat $backup_conf_file |grep 'compress_threads'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	galera_info=`cat $backup_conf_file |grep 'galera_info'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	slave_info=`cat $backup_conf_file |grep 'slave_info'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	#获取ftp参数
	ftp_ip=`cat $backup_conf_file |grep -w 'ftp_ip'|awk -F '=' '{print $2}'|sort|tail -n 1`
	ftp_user=`cat $backup_conf_file |grep -w 'ftp_user'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	ftp_pwd=`cat $backup_conf_file |grep -w 'ftp_pwd'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	ftp_port=`cat $backup_conf_file |grep -w 'ftp_port'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
	ftp_dir=`cat $backup_conf_file |grep -w 'ftp_dir'|awk -F '=' '{print $2}'|awk -F ' ' '{print $1}'|sort|tail -n 1`
fi

#开始增量备份
echo -e "`date +"%F %T"` [###开始xtrabackup增量备份###]" >> ${backup_log}
echo -e "`date +"%F %T"` [Note]:取最近一次全量备份文件:${incremental_offset}" >> ${backup_log}
#判断节点状态:单节点、主从、galera集群
if [ $galera_info = 0 ] && [ $slave_info = 0 ];then
    echo -e "`date +"%F %T"` [Note]:开启单节点模式备份" >>${backup_log}
	if [ $compress = 0 ];then
        echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
	    if [ $parallel = 1 ];then
	        echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		else
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		fi
	else
		echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
	        echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		fi
	fi
elif [ $galera_info = 1 ] && [ $slave_info = 0 ];then
	echo -e "`date +"%F %T"` [Note]:开启Galera集群模式备份">>${backup_log}
    if [ $compress = 0 ];then
        echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
            /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		else
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
        fi
    else
		echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads --galera-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
        fi
    fi
elif [ $galera_info = 0 ] && [ $slave_info = 1 ];then
    echo -e "`date +"%F %T"` [Note]:开启主从模式备份,备份目标为slave节点">>${backup_log}
    if [ $compress = 0 ];then
        echo -e "`date +"%F %T"` [Note]:不启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
            /usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		else
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
        fi
    else
		echo -e "`date +"%F %T"` [Note]:启动压缩备份" >>${backup_log}
		if [ $parallel = 1 ] && [ $compress_threads = 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:无并发压缩线程" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel = 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:无并发备份线程" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --compress --compress-threads=$compress_threads --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
		elif [ $parallel != 1 ] && [ $compress_threads != 1 ];then
			echo -e "`date +"%F %T"` [Note]:并发备份线程:$parallel" >>${backup_log}
			echo -e "`date +"%F %T"` [Note]:并发压缩线程:$compress_threads" >>${backup_log}
            echo -e "`date +"%F %T"` [Note]:/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1" >>${backup_log}
			/usr/bin/innobackupex --defaults-file=${defaults_file} --socket=${socket} --user=$username --password=$dbpwd --incremental --incremental-basedir=${backup_data_dir}/${incremental_offset} --no-timestamp --parallel=$parallel --compress --compress-threads=$compress_threads --slave-info ${backup_data_dir}/${backup_file} >> ${backup_log} 2>&1
        fi
    fi
fi

#备份结果检查
g_bak_result=`tail -n 2 ${backup_log} |grep "completed OK"|wc -l`
if [ $g_bak_result =  1 ];then
    echo -e "`date +"%F %T"` [Note]:incremental backup success!" >> ${backup_log}
    #校验备份的正确性
    pre_last_lsn=`cat ${backup_data_dir}/${incremental_offset}/xtrabackup_checkpoints | grep 'to_lsn' | awk '{print $3}'`
    cur_from_lsn=`cat ${backup_data_dir}/${backup_file}/xtrabackup_checkpoints | grep 'from_lsn' | awk '{print $3}'`
    if [ "${pre_last_lsn}" != "${cur_from_lsn}" ];then
        echo -e "`date +"%F %T"` [Error]:pre last lsn != cur from lsn, bakup failed" >> ${backup_log}
        exit 1
    else
		#是否启动异地备份
		if [ ${#ftp_ip} != 0 ];then
            echo -e "`date +"%F %T"` [Note]:压缩备份文件:$backup_file">>${backup_log}
            cd $backup_data_dir
            backup_ftp=$ftp_dir
            backup_file_tar=${backup_file}.tar.gz
            tar zcf ${backup_file_tar} ${backup_file}
            echo -e "`date +"%F %T"` [Note]:压缩完成!">>${backup_log}
            echo -e "`date +"%F %T"` [Note]:上传备份文件$backup_file_tar$ftp_ip服务器">>${backup_log}
            _ftp_result=`ftp -v -n $ftp_ip<<EOF
user $ftp_user $ftp_pwd
put ${backup_data_dir}/${backup_file_tar} ${backup_ftp}/${backup_file_tar}
bye
EOF`
			echo ${_ftp_result} >> ${backup_log}
			echo -e "`date +"%F %T"` [Note]:删除压缩全量备份文件:$backup_file_tar">>${backup_log}
			rm -rf ${backup_data_dir}/${backup_file_tar}
			echo -e "`date +"%F %T"` [Note]:压缩全量备份文件$backup_file_tar删除成功!">>${backup_log}
		else
			echo -e "`date +"%F %T"` [Warning]:没有设置异地备份!">>${backup_log}
		fi
		echo "`date +"%F %T"` 数据库增量备份完成!" >> ${backup_log}
	fi
else
    echo -e "`date +"%F %T"` [Error]:incremental backup failed!" >> ${backup_log}
    echo "`date +"%F %T"` 删除错误增量备份文件:${backup_file}" >> ${backup_log}
    rm -rf ${backup_data_dir}/${backup_file}
    echo "`date +"%F %T"` 错误增量备份文件${backup_file}删除成功!" >> ${backup_log}
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值