数据库备份脚本之MySQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42018518/article/details/88887182

目录

1、(备份调度机器)调度脚本: /home/wufei/backup_controll/backup_controll_wf.sh

2、(备份存储机器)默认配置文件:/home/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf

3、(备份存储机器)备份脚本函数:/home/backup_mysql_wufei/bin/xxxx_xtrabackup_wf.sh

4、(备份存储机器)备份脚本模板:/home/backup_mysql_wufei/bin/mysql_template_backup.sh


1、(备份调度机器)调度脚本: /home/wufei/backup_controll/backup_controll_wf.sh

#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Program : MySQL 备份脚本                                       #
# Version : percona xtrabackup 2.4.7                            #
# Author  : [email protected]                                     #
# Description : backup base functions                           #
# Date : 2018-06-12                                             #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

usage(){
    echo "$0 <backup_db>"
}

if [ $# -ne 1 ];then
    usage;
    echo "backup_db: such as 'higo_bim'"
    exit;
fi

user="backup_wf"
passwd="xxxxx"
host="xx.xx.1.49"
port=3303
db_name="wf_dbbackup"
tb_name="db_backup_policy"
backup_db=$1
log_dir="/home/wufei/backup_controll/log"
xtrabackup_wf_file="/home/backup_mysql_wufei/bin/higo_xtrabackup_wf.sh"

# 获取相关参数信息
function getinfo(){
    sql="select id,port,mode,inet_ntoa(dest_ip) as dest_ip from ${tb_name} where db='${backup_db}'"
    read id port db_mode db_dest_ip <<< `mysql_e "${sql}"`
}

# 连接MySQL
function mysql_e(){
    mysql -u${user} -p${passwd} -h${host} -P${port} -D${db_name} -Ne "${1}"
}

# 获取当前时间
function backup_datetime(){
    backup_date=`date +%F`
    backup_time=`date +%H:%M:%S`
}

# 执行备份
function init(){
    ssh -i ~/.ssh/id_rsa  root@${db_dest_ip} "bash ${xtrabackup_wf_file} ${id}" > /dev/null 2>&1
}

# 记录日志信息
function setlog(){
    echo "{backup_db:${backup_db};port:${port};type:${db_mode};start_datetime:${start_datetime};end_datetime:${end_datetime};info:backup end}" >> ${log_dir}/${backup_db}_${port}.log
}

function main(){
    # 获取相关参数信息
    getinfo
    port=${port}
    db_mode=${db_mode}
    db_dest_ip=${db_dest_ip}
    id=${id}

    #获取备份开始时间
    backup_datetime
    start_datetime="${backup_date} ${backup_time}"

    # 执行备份
    init

    # 获取备份结束时间
    backup_datetime
    end_datetime="${backup_date} ${backup_time}"

    # 记录日志
    setlog
}

main

2、(备份存储机器)默认配置文件:/home/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Program : MySQL 备份配置文件                                    #
# Author  : [email protected]                                     #
# Date : 2018-06-07                                             #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# 备份数据库私有配置文件(存储服务器路径)(默认)
conf_template=/home/backup_mysql_wufei/conf/xxxx_mysql_template_wf.conf
# 备份数据库私有配置文件(远程服务器路径)(默认)
remote_conf=/data/percona-xtrabackup/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf

# MySQL备份信息数据库连接用户
db_user=backup_wf

# MySQL备份信息数据库连接密码
db_password=xxxxx

# MySQL备份信息数据库
db_name=wf_dbbackup

# MySQL备份信息表
db_table_name=db_backup_policy

# MySQL备份信息数据库IP
db_host=xx.xx.1.49

# MySQL备份信息数据库端口
db_port=3303

# MySQL备份用户名(默认)
user=xtrabackup

# MySQL备份用户密码(默认)
password=xtrabackup

# 备份路径(默认)
backup_dir=/data/percona-xtrabackup/backup_mysql_wufei/backup

# 存储路径(默认)
storage_dir=/home/backup_mysql_wufei/backup

# 备份保存天数(默认)
remain_days=30

# 备份软件路径(默认)
xtrabackup_dir=/data/percona-xtrabackup/xtrabackup

# 全备是在一周的第几天(默认)
full_backup_week_day=2

# 全量备份信息名称 前缀(默认)
full_backup_prefix=full

# 增量备份信息名称 前缀(默认)
increment_prefix=incr

# 克隆从库信息名称 前缀(默认)
cloneslave_prefix=clone

# MySQL配置文件(默认)
mysql_conf_file=/etc/my.cnf

# MySQL socket文件(默认)
mysql_socket_file=/data/mysql-5.7.16/etc/mysql.sock

# 错误日志文件(根据此文件知道备份是否成功)(默认)
# format:
# {week_day:1,dir:full/incr_2017-06-12_14-58-56_7,type:full/incr,date:2017-06-14}
storage_error=/home/backup_mysql_wufei/var
error_log=/data/percona-xtrabackup/backup_mysql_wufei/var

# 索引文件(默认)
# format:
# {week_day:1,dir:full/incr_2017-06-12_14-58-56_7,type:full/incr}
storage_index=/home/backup_mysql_wufei/var
index_file=/data/percona-xtrabackup/backup_mysql_wufei/var

# 存储binlog备份目录(默认)
storage_binlogs=/home/backup_mysql_wufei/binlogs

# 日志目录
log_dir=/data/percona-xtrabackup/backup_mysql_wufei/log

# 存储日志目录(默认)
storage_log=/home/backup_mysql_wufei/log

# 备份模板脚本文件(存储服务器路径)
storage_backup_template=/home/backup_mysql_wufei/bin/mysql_template_backup.sh
# 备份数据库私有配置文件(远程服务器路径)
remote_backup_template=/data/percona-xtrabackup/backup_mysql_wufei/bin/mysql_template_backup.sh

3、(备份存储机器)备份脚本函数:/home/backup_mysql_wufei/bin/xxxx_xtrabackup_wf.sh

#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Program : MySQL 备份脚本                                       #
# Version : percona xtrabackup 2.4.7                            #
# Author  : [email protected]                                     #
# Description : backup base functions                           #
# Date : 2018-06-07                                             #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# 更新时间:2018-09-11;更新人:WUFEI;更新内容:增加记录备份信息到MySQL表db_backup_info中功能,并且新增在执行备份脚本前清空本地默认索引文件方法。
# 更新时间:2018-09-12;更新人:WUFEI;更新内容:修改db_backup_info方法,插入SQL中增加policy_id字段。
# 更新时间:2018-09-14;更新人:WUFEI;更新内容:增加备份状态监控提醒,当备份失败failed时发送邮件给DBA
# 更新时间:2018-11-15;更新人:WUFEI;更新内容:由于重新安装了MySQL5.6.16,所以把mysql的相关命令改为绝对路径/data/mysql-5.6.16/bin/mysql

function usage(){
    echo "$0 <policy_id>"
}
if [ $# -ne 1 ];then
    usage;
    exit;
fi

backup_wufei_path="/home/backup_mysql_wufei"
# 接受要备份的策略ID
policy_id=$1
# 读取配置文件中的所有变量,设置为全局变量
# 配置文件
conf_file="/home/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf"
# 备份库配置文件(存储服务器生成的临时文件路径)(默认:/home/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf)
conf_template=`sed '/^conf_template=/!d;s/.*=//' ${conf_file}`
# 备份数据库私有配置文件(远程服务器路径)(默认:/data/percona-xtrabackup/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf)
remote_conf=`sed '/^remote_conf=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息数据库连接用户(默认:root)
db_user=`sed '/^db_user=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息数据库连接密码(默认:XXXXX)
db_password=`sed '/^db_password=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息数据库(默认:wf_dbbackup)
db_name=`sed '/^db_name=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息表(默认:db_backup_policy)
db_table_name=`sed '/^db_table_name=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息数据库IP(默认:xx.xx.1.49)
db_host=`sed '/^db_host=/!d;s/.*=//' ${conf_file}`
# MySQL备份信息数据库端口(默认:3033)
db_port=`sed '/^db_port=/!d;s/.*=//' ${conf_file}`
# MySQL备份用户(默认:xtrabackup)
user=`sed '/^user=/!d;s/.*=//' ${conf_file}`
# MySQL备份用户密码(默认:xtrabackup)
password=`sed '/^password=/!d;s/.*=//' ${conf_file}`
# MySQL备份目录(默认:/data/percona-xtrabackup/backup_mysql_wufei/backup)
backup_dir=`sed '/^backup_dir=/!d;s/.*=//' ${conf_file}`
# 存储备份目录(默认:/home/backup_mysql_wufei/backup)
storage_dir=`sed '/^storage_dir=/!d;s/.*=//' ${conf_file}`
# 备份保存天数(默认:30)
remain_days=`sed '/^remain_days=/!d;s/.*=//' ${conf_file}`
# percona xtrabackup备份软件路径(默认:/data/percona-xtrabackup/xtrabackup)
xtrabackup_dir=`sed '/^xtrabackup_dir=/!d;s/.*=//' ${conf_file}`
# 全备在一周的第几天(默认:2)
full_backup_week_day=`sed '/^full_backup_week_day=/!d;s/.*=//' ${conf_file}`
# 全量备份信息名称 前缀(默认:full)
full_backup_prefix=`sed '/^full_backup_prefix=/!d;s/.*=//' ${conf_file}`
# 增量备份信息名称 前缀(默认:incr)
increment_prefix=`sed '/^increment_prefix=/!d;s/.*=//' ${conf_file}`
# 克隆从库信息名称 前缀(默认:clone)
cloneslave_prefix=`sed '/^cloneslave_prefix=/!d;s/.*=//' ${conf_file}`
# MySQL配置文件(默认:/etc/my.cnf)
mysql_conf_file=`sed '/^mysql_conf_file=/!d;s/.*=//' ${conf_file}`
# MySQL socket文件(默认:/data/mysql-5.7.16/etc/mysql.sock)
mysql_socket_file=`sed '/^mysql_socket_file=/!d;s/.*=//' ${conf_file}`
# 备份错误日志文件(默认:/data/percona-xtrabackup/backup_mysql_wufei/var/mysql_wufei_backup.err)
error_log=`sed '/^error_log=/!d;s/.*=//' ${conf_file}`
# 存储错误日志文件(默认:/home/backup_mysql_wufei/var/mysql_wufei_backup.err)
storage_error=`sed '/^storage_error=/!d;s/.*=//' ${conf_file}`
# 备份索引文件(默认:/data/percona-xtrabackup/backup_mysql_wufei/var/mysql_wufei_backup.index)
index_file=`sed '/^index_file=/!d;s/.*=//' ${conf_file}`
# 存储索引文件(默认:/home/backup_mysql_wufei/var/mysql_wufei_backup.index)
storage_index=`sed '/^storage_index=/!d;s/.*=//' ${conf_file}`
# 存储binlog备份目录(默认:/home/backup_mysql_wufei/binlogs)
storage_binlogs=`sed '/^storage_binlogs=/!d;s/.*=//' ${conf_file}`
# 日志存放目录(默认:/data/percona-xtrabackup/backup_mysql_wufei/log)
log_dir=`sed '/^log_dir=/!d;s/.*=//' ${conf_file}`
# 存储日志目录(默认:/home/backup_mysql_wufei/log)
storage_log=`sed '/^storage_log=/!d;s/.*=//' ${conf_file}`
# 备份模板脚本文件(存储服务器路径)(默认:/home/backup_mysql_wufei/bin/mysql_template_backup.sh)
storage_backup_template=`sed '/^storage_backup_template=/!d;s/.*=//' ${conf_file}`
# 备份数据库私有配置文件(远程服务器路径)(默认:/data/percona-xtrabackup/backup_mysql_wufei/bin/mysql_template_backup.sh)
remote_backup_template=`sed '/^remote_backup_template=/!d;s/.*=//' ${conf_file}`

# 备份日期
backup_date=`date +%F`
backup_time=`date +%H-%M-%S`
backup_week_day=`date +%u`
backup_dt=`date +%y%m%d_%H%M%S`
backup_dtt=`date +%y%m%d%H%M%S`

# MySQL备份信息数据库连接
function mysql_conn01(){
    /data/mysql-5.6.16/bin/mysql -u${db_user} -p${db_password} -h${db_host} -P${db_port} -N -e "${1}"
}
function mysql_conn02(){
    /data/mysql-5.6.16/bin/mysql -u${db_user} -p${db_password} -h${db_host} -P${db_port}
}

# 获取备份目的IP和路径等信息
function getdest(){
    if [[ $policy_id = '' ]]; then
        info="No policy_id was found!"
        echo "$info"
        exit;
    else

        sql="select db,inet_ntoa(ip) as ip,port,data_socket,inet_ntoa(dest_ip) as dest_ip,mode,full_backup_week_day,remain_days,zip_type,parallel,throttle,begintime from ${db_name}.${db_table_name} where id=${policy_id}"
	read db db_backup_ip db_backup_port db_backup_socket db_dest_ip db_mode db_full_backup_week_day db_remain_days zip_type db_parallel db_throttle db_begintime <<< `mysql_conn01 "${sql}"`

        # 如果没有存储备份目录则建立
        storage_dir="${storage_dir}/mysql_${db}_${db_backup_port}"
        if [ ! -d "${storage_dir}" ];then
            mkdir -p ${storage_dir}
        fi

        # 如果没有存储binlog目录则建立
        storage_binlogs="${storage_binlogs}/mysql_${db}_${db_backup_port}"
        if [ ! -d "${storage_binlogs}" ];then
            mkdir -p ${storage_binlogs}
        fi

        # 如果没有存储日志目录则建立
        storage_log=${storage_log}
        if [ ! -d "${storage_log}" ];then
            mkdir -p ${storage_log}
        fi

        # 如果没有 var dir 则建立
        # var_dir=storage_error or var_dir=storage_index
        if [ ! -d "${storage_error}" ];then
            mkdir -p ${storage_index}
        fi

        # 如果没有存储错误日志文件则建立
        storage_error_file="${storage_error}/mysql_${db}_${db_backup_port}.err"
        if [ ! -f "${storage_error_file}" ];then
            touch ${storage_error_file}
        fi

        # 如果没有存储索引文件则建立
        storage_index_file="${storage_index}/mysql_${db}_${db_backup_port}.index"
        if [ ! -f "${storage_index_file}" ];then
            touch ${storage_index_file}
        fi

        # 若果没有默认临时错误日志文件和索引文件则建立
        default_error_file="/home/backup_mysql_wufei/var/mysql_wufei_backup.err"
        if [ ! -f "${default_error_file}" ];then
            touch ${default_error_file}
        fi
        default_index_file="/home/backup_mysql_wufei/var/mysql_wufei_backup.index"
        if [ ! -f "${default_index_file}" ];then
            touch ${default_index_file}
        fi

        # 如果没有备份过程信息日志文件则建立
        if [[ ${db_mode} = 'incr' && ${full_backup_week_day} -eq ${backup_week_day} ]];then
            backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
        else
            backup_folder=${db_mode}_${backup_date}_${backup_time}_${backup_week_day}
        fi
        innobackupex_log="${storage_log}/${backup_folder}_${db}_${db_backup_port}.log"
        if [ ! -f "${innobackupex_log}" ];then
            touch ${innobackupex_log}
        fi

    fi
}

function check_innnobackupex(){

    echo "check the innobackupex:innobackupex version 2.4.7 Linux (x86_64) (revision id: 05f1fcf)" >> ${storage_logfile}
    # 检查innobackupex工具是否安装
    innobackupex_info=`ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "ls /data/percona-xtrabackup/xtrabackup/bin/innobackupex"`

    if [[ ${innobackupex_info} = '' ]]
    then
        info="xtrabackup not installed!"
        echo "${info}" >> ${storage_logfile}
        echo "创建相关目录及文件" >> ${storage_logfile}
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/soft"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/percona-xtrabackup/backup_mysql_wufei/bin"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/percona-xtrabackup/backup_mysql_wufei/conf"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/percona-xtrabackup/backup_mysql_wufei/var"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/percona-xtrabackup/backup_mysql_wufei/log"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mkdir -p /data/percona-xtrabackup/backup_mysql_wufei/backup/mysql_${db}_${db_backup_port}"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "touch /data/percona-xtrabackup/backup_mysql_wufei/var/mysql_${db}_${db_backup_port}.err"
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "touch /data/percona-xtrabackup/backup_mysql_wufei/var/mysql_${db}_${db_backup_port}.index"

        echo "install percona xtrabackup 2.4.7" >> ${storage_logfile}
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "rsync -avprP -e ssh ${db_host}:/home/wufei/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz /data/soft/" >> ${storage_logfile} 2>&1
        echo "使用二进制编译好的就行了,这种工具无需源码编译,因为没有什么功能需要定制" >> ${storage_logfile}
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "tar -zxvf /data/soft/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz -C /data/percona-xtrabackup/" >> ${storage_logfile} 2>&1
        ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "mv /data/percona-xtrabackup/percona-xtrabackup-2.4.7-Linux-x86_64 /data/percona-xtrabackup/xtrabackup"
	# 为了防止/etc/profile出现意想不到的错误,执行innobackupex时直接使用了绝对路径(在mysql_template_backup.sh中)
        # ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "echo 'export PATH=\$PATH:/data/percona-xtrabackup/xtrabackup/bin' >> /etc/profile"
        # ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "source /etc/profile"
        echo "创建备份用户" >> ${storage_logfile}
    else
	echo "已安装innobackupex工具" >> ${storage_logfile}
    fi

    innobackupex_info=`ssh -i ~/.ssh/id_rsa root@${db_backup_ip} "ls /data/percona-xtrabackup/xtrabackup/bin/innobackupex"`
    if [[ ${innobackupex_info} = '' ]]
    then
        echo "xtrabackup install fail! please check up on xtrabackup" >> ${storage_logfile}
        exit 1
    fi
}

# check_innnobackupex

# 生成临时cnf文件,规避参数错误
function createcnf(){
    echo "生成临时cnf文件,规避参数错误" >> ${storage_logfile}
    ssh -i ~/.ssh/id_rsa  root@$db_backup_ip "cat /etc/my.cnf|sed 's/.*character_set_client.*//g' > /etc/my.cnf.bakuse"
    ssh -i ~/.ssh/id_rsa  root@$db_backup_ip "chown mysql:mysql /etc/my.cnf.bakuse"
}

# HIGO全量备份
function higo_full_backup(){
    # 生成远程配合文件
    echo "date:${wf_dt} 生成远程配置文件:higo_mysql_template_wf.conf" >> ${storage_logfile}
    echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" > ${conf_template}
    echo "# Program : MySQL 备份配置文件                                  #" >> ${conf_template}
    echo "# Author  : [email protected]                                 #" >> ${conf_template}
    echo "# Date : ${backup_date}                                             #" >> ${conf_template}
    echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" >> ${conf_template}
    echo "host=${db_backup_ip}" >> ${conf_template}
    echo "port=${db_backup_port}" >> ${conf_template}
    echo "user=${user}" >> ${conf_template}
    echo "password=${password}" >> ${conf_template}
    echo "backup_dir=${backup_dir}" >> ${conf_template}
    echo "xtrabackup_dir=${xtrabackup_dir}" >> ${conf_template}
    echo "full_backup_week_day=${full_backup_week_day}" >> ${conf_template}
    echo "full_backup_prefix=${full_backup_prefix}" >> ${conf_template}
    echo "increment_prefix=${increment_prefix}" >> ${conf_template}
    echo "cloneslave_prefix=${cloneslave_prefix}" >> ${conf_template}
    echo "mysql_conf_file=${mysql_conf_file}" >> ${conf_template}
    echo "mysql_socket_file=${mysql_socket_file}" >> ${conf_template}
    echo "error_log=${error_log}" >> ${conf_template}
    echo "index_file=${index_file}" >> ${conf_template}
    echo "log_dir=${log_dir}" >> ${conf_template}
    echo "var_dir=${var_dir}" >> ${conf_template}
    echo "parallel=${parallel}" >> ${conf_template}
    echo "throttle=${throttle}" >> ${conf_template}
    echo "dest_ip=${dest_ip}" >> ${conf_template}
    echo "storage_backup=${storage_backup}" >> ${conf_template}
    echo "storage_binlogs=${storage_binlog}" >> ${conf_template}
    echo "innobackupex_log=${innobackupex_log}" >> ${conf_template}
    echo "backup_date=${backup_date}" >> ${conf_template}
    echo "backup_time=${backup_time}" >> ${conf_template}
    echo "backup_week_day=${backup_week_day}" >> ${conf_template}
    echo "default_error_file=${default_error_file}" >> ${conf_template}
    echo "default_index_file=${default_index_file}" >> ${conf_template}
    echo "mode=${mode}" >> ${conf_template}
    # echo "" >> ${conf_template}
    echo "远程配置文件生成成功!" >> ${storage_logfile}

    echo "发送配置文件到远程备份服务器" >> ${storage_logfile}
    rsync -avprP -e ssh ${conf_template} ${db_backup_ip}:${conf_dir} >> ${storage_logfile} 2>&1
    echo "发送备份脚本模板到远程备份服务器" >> ${storage_logfile}
    rsync -avprP -e ssh ${storage_backup_template} ${db_backup_ip}:${bin_dir} >> ${storage_logfile} 2>&1

    echo "远程执行脚本进行备份" >> ${storage_logfile}
    # 模板位置(10.20.5.16):/home/backup_mysql_wufei/bin/mysql_template_backup.sh
    # 远程备份文件路径(默认):/data/percona-xtrabackup/backup_mysql_wufei/bin/mysql_template_backup.sh
    ssh -i ~/.ssh/id_rsa  root@$db_backup_ip "bash ${remote_backup_template}" >> ${storage_logfile} 2>&1

    # backup_type=$?
    # if [ 0 -eq "${backup_0k}" ]; then
    #    echo "innobackupex(${backup_date}): completed OK!" >> ${storage_logfile}
    # else
    #	echo "innobackupex(${backup_date}): backup failure!" >> ${storage_logfile}
    # fi
}

# 添加索引,索引记录了当前最新的备份,记录错误消息到文件
function append_index_error_to_file(){
    cat ${default_index_file} >> ${storage_index_file}
    cat ${default_error_file} >> ${storage_error_file}
}

# 在执行备份脚本前清空本地默认索引文件
function empty_index_error_to_file(){
    cat /dev/null > ${default_index_file}
    cat /dev/null > ${default_error_file}
}

# 备份状态监控提醒
function backup_monitor_wf(){
    backup_monitor_wf_file="/home/wufei/monitor/bin/backup_monitor_wf.sh"
    from_notice="email"
    # 如果备份状态为failed即backup_status='failed'时马上发送邮件通知DBA
    if [ ${backup_status} = 'failed' ]
    then
        ssh -i ~/.ssh/id_rsa  root@${db_host} "bash ${backup_monitor_wf_file} -o ${from_notice}" > /dev/null 2>&1
    fi
}

# 增加记录备份信息到MySQL表db_backup_info中
function db_backup_info(){
    # 获取记录相关信息值
    # policy_id、备份日期backup_date、端口db_backup_port、IP db_backup_ip、备份DB db、备份方式 mode、保存地址IP dest_ip
    # 保存目录
    dest_dir=${storage_backup}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
    # 备份开始时间
    backup_start_time="${backup_date} ${begintime}"
    # 备份结束时间(获取当前时间)
    backup_end_time=`date "+%Y-%m-%d %H:%M:%S"`
    # 备份状态
    if [[ ! -s ${default_error_file}  && -s ${default_index_file} && -s ${innobackupex_log} ]]
    then
        backup_status='success'
    else
        backup_status='failed'
    fi
    sql="insert into ${db_name}.db_backup_info(policy_id,backup_date,port,ip,db,mode,dest_ip,dest_dir,begintime,endtime,backup_status) values (${policy_id},'${backup_date}',${db_backup_port},inet_aton('${db_backup_ip}'),'${db}','${mode}',inet_aton('${dest_ip}'),'${dest_dir}','${backup_start_time}','${backup_end_time}','${backup_status}');"
    echo "${sql}" | mysql_conn02
    sql_status=$?
    if [ 0 -eq "${sql_status}" ]; then
        backup_monitor_wf
    fi
}

# 删除之前的备份(默认删除一周前备份)
function delete_before_backup(){
    find ${storage_backup} -mindepth 1 -maxdepth 1 -type d -mtime +${remain_days} | xargs rm -rf
    find ${storage_log} -type f -mtime +${remain_days} | xargs rm -f
}

# 备份binlog日志
function backup_mysqlbinlog(){
    echo "MySQL binlog 远程备份"
}

function init(){
    cd ${backup_wufei_path}
    # 获取备份目的IP和路径等信息
    getdest
    db=${db}
    db_backup_ip=${db_backup_ip}
    db_backup_port=${db_backup_port}
    mysql_socket_file=${db_backup_socket}
    dest_ip=${db_dest_ip}
    mode=${db_mode}
    full_backup_week_day=${db_full_backup_week_day}
    remain_days=${db_remain_days}
    zip_type=${zip_type}
    parallel=${db_parallel}
    throttle=${db_throttle}
    begintime=${db_begintime}

    storage_logfile="${storage_log}/db_backup_${db_backup_port}_${backup_dt}.log"
    echo "" > ${storage_logfile}
    echo "===== init =====" >> ${storage_logfile}
    echo "DateTime: `date '+%Y-%m-%d %H:%M:%S'`" >> ${storage_logfile}

    storage_backup=${storage_dir}
    storage_binlog=${storage_binlogs}
    storage_error_file=${storage_error_file}
    storage_index_file=${storage_index_file}
    default_error_file=${default_error_file}
    default_index_file=${default_index_file}
    innobackupex_log=${innobackupex_log}

    backup_dir="/data/percona-xtrabackup/backup_mysql_wufei/backup/mysql_${db}_${db_backup_port}"
    mysql_conf_file="/etc/my.cnf.bakuse"
    error_log="/data/percona-xtrabackup/backup_mysql_wufei/var/mysql_${db}_${db_backup_port}.err"
    index_file="/data/percona-xtrabackup/backup_mysql_wufei/var/mysql_${db}_${db_backup_port}.index"
    var_dir="/data/percona-xtrabackup/backup_mysql_wufei/var"
    conf_dir="/data/percona-xtrabackup/backup_mysql_wufei/conf"
    bin_dir="/data/percona-xtrabackup/backup_mysql_wufei/bin"

    # 在执行备份脚本前清空本地默认索引文件
    empty_index_error_to_file

    # 检查innobackupex工具是否安装
    check_innnobackupex

    # 生成临时cnf文件,规避参数错误
    createcnf

    # HIGO全量备份
    higo_full_backup

    # 添加索引,索引记录了当前最新的备份,记录错误消息到文件
    append_index_error_to_file

    # 清除保存天数之前备份及日志文件
    delete_before_backup

    # 增加记录备份信息到MySQL表db_backup_info中
    db_backup_info
}

function main(){
    init
    echo "===== ${db} backup end =====" >>${storage_logfile}
}
main

4、(备份存储机器)备份脚本模板:/home/backup_mysql_wufei/bin/mysql_template_backup.sh

#!/bin/bash

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Program : MySQL 备份脚本                                       #
# Version : percona xtrabackup 2.4.7                            #
# Author  : [email protected]                                     #
# Description : backup base template                            #
# Date : 2018-06-11                                             #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# 读取配置文件中的所有变量,设置为全局变量
# 配置文件
localhost='127.0.0.1'
conf_file="/data/percona-xtrabackup/backup_mysql_wufei/conf/higo_mysql_template_wf.conf"
# 获取本机IP及端口
host=`sed '/^host=/!d;s/.*=//' ${conf_file}`
port=`sed '/^port=/!d;s/.*=//' ${conf_file}`
# MySQL备份用户
user=`sed '/^user=/!d;s/.*=//' ${conf_file}`
# MySQL备份用户密码
password=`sed '/^password=/!d;s/.*=//' ${conf_file}`
# MySQL备份目录
backup_dir=`sed '/^backup_dir=/!d;s/.*=//' ${conf_file}`
# percona xtrabackup备份软件路径
xtrabackup_dir=`sed '/^xtrabackup_dir=/!d;s/.*=//' ${conf_file}`
# 全备在一周的第几天
full_backup_week_day=`sed '/^full_backup_week_day=/!d;s/.*=//' ${conf_file}`
# 全量备份信息名称 前缀
full_backup_prefix=`sed '/^full_backup_prefix=/!d;s/.*=//' ${conf_file}`
# 增量备份信息名称 前缀
increment_prefix=`sed '/^increment_prefix=/!d;s/.*=//' ${conf_file}`
# 克隆从库信息名称 前缀
cloneslave_prefix=`sed '/^cloneslave_prefix=/!d;s/.*=//' ${conf_file}`
# MySQL配置文件
mysql_conf_file=`sed '/^mysql_conf_file=/!d;s/.*=//' ${conf_file}`
# MySQL socket文件
mysql_socket_file=`sed '/^mysql_socket_file=/!d;s/.*=//' ${conf_file}`
# 备份错误日志文件
error_log=`sed '/^error_log=/!d;s/.*=//' ${conf_file}`
# 备份索引文件
index_file=`sed '/^index_file=/!d;s/.*=//' ${conf_file}`
# 日志存放目录
log_dir=`sed '/^log_dir=/!d;s/.*=//' ${conf_file}`
# 备份信息存放目录
var_dir=`sed '/^var_dir=/!d;s/.*=//' ${conf_file}`
# 获取--parallel值(此参数用于开启多个子进程并发备份多个数据文件)
parallel=`sed '/^parallel=/!d;s/.*=//' ${conf_file}`
# 获取--throttle值(此参数用于限制备份过程中每秒的IO次数)
throttle=`sed '/^throttle=/!d;s/.*=//' ${conf_file}`
# 存储服务器IP
dest_ip=`sed '/^dest_ip=/!d;s/.*=//' ${conf_file}`
# 存储服务器备份保存目录
storage_backup=`sed '/^storage_backup=/!d;s/.*=//' ${conf_file}`
# 存储服务器binlog保存目录
storage_binlogs=`sed '/^storage_binlogs=/!d;s/.*=//' ${conf_file}`
# 存储服务器备份过程信息日志文件
innobackupex_log=`sed '/^innobackupex_log=/!d;s/.*=//' ${conf_file}`
# 存储备份索引默认文件
default_index_file=`sed '/^default_index_file=/!d;s/.*=//' ${conf_file}`
# 存储备份错误日志默认文件
default_error_file=`sed '/^default_error_file=/!d;s/.*=//' ${conf_file}`
# 备份模式
mode=`sed '/^mode=/!d;s/.*=//' ${conf_file}`

# 备份日期
# backup_date=`date +%F`
backup_date=`sed '/^backup_date=/!d;s/.*=//' ${conf_file}`
# backup_time=`date +%H-%M-%S`
backup_time=`sed '/^backup_time=/!d;s/.*=//' ${conf_file}`
# backup_week_day=`date +%u`
backup_week_day=`sed '/^backup_week_day=/!d;s/.*=//' ${conf_file}`

#创建相关目录
#========如果没有备份文件夹则建立之=======#
if [ ! -d "${backup_dir}" ];
then
	echo "无此文件夹,建立中..."
	mkdir -p ${backup_dir}
fi
#========如果没有日志文件夹则建立之=======#
if [ ! -d "${log_dir}" ];
then
        echo "无此文件夹,建立中..."
        mkdir -p ${log_dir}
fi
#========如果没有索引文件夹则建立之=======#
if [ ! -d "${var_dir}" ];
then
        echo "无此文件夹,建立中..."
        mkdir -p ${var_dir}
fi

# XXXX全量备份(5.6.16)
function higo_extra_full_backup() {
	# 由于老数据库服务器磁盘容量问题,不能保证每份实例都能在本地保存一份最新备份,故在备份前删除当前所有已存在的本地备份
	find ${backup_dir%/*} -mindepth 2 -maxdepth 2 -type d | xargs rm -rf
	backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
	mkdir -p ${backup_dir}/${backup_folder}
	${xtrabackup_dir}/bin/innobackupex \
		--defaults-file=${mysql_conf_file} \
		--user=${user} \
		--password=${password} \
		--host=${localhost} \
		--port=${port} \
		--parallel=${parallel} \
		--throttle=${throttle} \
		--defaults-group=mysqld${port} \
		--slave-info \
		--no-timestamp \
		${backup_dir}/${backup_folder} > ${log_dir}/${backup_folder}_${port}.log 2>&1
	return $?
}

# XXXX全量备份(5.7.16+)
function higo_full_backup() {
        backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}

        mkdir -p ${backup_dir}/${backup_folder}
        ${xtrabackup_dir}/bin/innobackupex \
                --defaults-file=${mysql_conf_file} \
                --user=${user} \
                --password=${password} \
                --socket=${mysql_socket_file} \
                --parallel=${parallel} \
                --throttle=${throttle} \
                --defaults-group=mysqld${port} \
                --slave-info \
                --no-timestamp \
                ${backup_dir}/${backup_folder} > ${log_dir}/${backup_folder}_${port}.log 2>&1
        return $?
}

# 全量备份(5.7.16+)
function full_backup() {
	backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}

	mkdir -p ${backup_dir}/${backup_folder}
	${xtrabackup_dir}/bin/innobackupex \
		--defaults-file=${mysql_conf_file} \
		--user=${user} \
		--password=${password} \
		--socket=${mysql_socket_file} \
		--parallel=${parallel} \
                --throttle=${throttle} \
                --defaults-group=mysqld${port} \
		--no-timestamp \
		${backup_dir}/${backup_folder} > ${log_dir}/${backup_folder}_${port}.log 2>&1
	return $?
}

# 增量备份(5.7.16+)
function increment_backup() {
	backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}
	incr_base_folder=`sed -n '$p' $index_file | \
			awk -F '[, {}]*' '{print $3}' | \
			awk -F ':' '{print $2}'`

	mkdir -p ${backup_dir}/${backup_folder}
	${xtrabackup_dir}/bin/innobackupex \
		--defaults-file=${mysql_conf_file} \
		--user=${user} \
		--password=${password} \
		--socket=${mysql_socket_file} \
		--parallel=${parallel} \
                --throttle=${throttle} \
                --defaults-group=mysqld${port} \
		--no-timestamp \
		--incremental \
		${backup_dir}/${backup_folder} \
		--incremental-basedir=${backup_dir}/${incr_base_folder} > ${log_dir}/${backup_folder}_${port}.log 2>&1
	return $?
}

# 克隆从库
function cloneslave_backup() {
	backup_folder=${cloneslave_prefix}_${backup_date}_${backup_time}_${backup_week_day}
	mkdir -p ${backup_dir}/${backup_folder}
	${xtrabackup_dir}/bin/innobackupex \
		--defaults-file=${mysql_conf_file} \
		--user=${user} \
		--password=${password} \
		--socket=${mysql_socket_file} \
		--parallel=${parallel} \
                --throttle=${throttle} \
                --defaults-group=mysqld${port} \
		--slave-info \
		--safe-slave-backup \
		--no-timestamp \
		${backup_dir}/${backup_folder} > ${log_dir}/${backup_folder}_${port}.log 2>&1
	return $?
}

# 删除之前的备份(一般在全备完成后使用)
function delete_before_backup() {
	cat ${index_file} | awk -F '[, {}]*' '{print $3}' | \
		awk -v backup_dir=${backup_dir} -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", backup_dir, $2)}}' | \
		/bin/bash
	cat ${index_file} | awk -F '[, {}]*' '{print $3}' | \
		sed 's/$/_*.log/g' | \
		awk -v log_dir=${log_dir} -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", log_dir, $2)}}' | \
		/bin/bash
}

# 备份索引文件及清除一周之前的索引文件
function backup_index_file() {
	index_suffix=`date -d "1 day ago" +%F`
	cp -r ${index_file} ${index_file}_${index_suffix}
	find ${index_file}_* -type f -mtime +6 | xargs rm -f
}

# 发送索引文件到远程
function send_index_file_to_remote() {
	rsync -avpP -e ssh ${index_file} ${dest_ip}:${default_index_file}
	# echo 'send index file ok'
}

# 发送错误日志信息到远程
function send_error_file_to_remote() {
        rsync -avpP -e ssh ${error_log} ${dest_ip}:${default_error_file}
        # echo 'send error file ok'
}

# 添加索引,索引记录了当前最新的备份
function append_index_to_file() {
	echo "{week_day:${backup_week_day}, \
		dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \
		type:${1}, \
		date:${backup_date}}" >> ${index_file}
}

# 记录错误消息到文件
function logging_backup_err() {
	echo "{week_day:${backup_week_day}, \
		dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \
		type:${1}, \
		date:${backup_date}}" >> ${error_log}
}

# 清空索引
function purge_index_from_file() {
	> ${index_file}
}

# 清空错误日志信息
function purge_err_log() {
	> ${error_log}
}

# 打包备份
function tar_backup_file() {
	# echo "tar $1 ok"
	tar -jcvf ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}
}

# 发送备份到远程
function send_backup_to_remote() {
	# echo "send $1 remote ok"
	rsync -avprP -e ssh ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day} ${dest_ip}:${storage_backup}
        rsync -avprP -e ssh ${log_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}_${port}.log ${dest_ip}:${innobackupex_log}
}

# 判断选择那种备份策略
# incr:0    clone:1    full:2
function get_backup_strategy() {
	if [[ ${mode} = 'incr' ]]; then
		backup_strategy=0
	elif [[ ${mode} = 'clone' ]]; then
		backup_strategy=1
	else
		backup_strategy=2
	fi
	return ${backup_strategy}
}

# 增量备份判断是应该全备还是增量备份
# 0:full    1:incr
function get_backup_type() {
	full_backup_week_day=`sed '/^full_backup_week_day=/!d;s/.*=//' ${conf_file}`
	backup_type=0
	if [ "${full_backup_week_day}" -eq `date +%u` ]; then
		backup_type=0
	else
		backup_type=1
	fi
	if [ ! -n "`cat $index_file`" ]; then
		backup_type=0
	fi
	return ${backup_type}
}

# 判断MySQL版本,然后根据MySQL版本再选择合适的配方策略
# mysql5.6:0     mysql5.7:1
function get_mysql_version() {
	mysql_version=`mysql --help | grep Distrib | awk '{print $5}' | sed 's/,//'`
	if [[ ${mysql_version} = '5.6.16' ]];then
		backup_mysql=0
	else
		backup_mysql=1
	fi
	return ${backup_mysql}
}

# 测试配置文件的正确性
function test_conf_file() {
	# 判断每个变量是否在配置文件中有配置,没有则退出程序
	if [ ! -n "$host" ]; then echo 'fail: configure file host not set'; exit 2; fi
	if [ ! -n "$port" ]; then echo 'fail: configure file port not set'; exit 2; fi
	if [ ! -n "$user" ]; then echo 'fail: configure file user not set'; exit 2; fi
  	if [ ! -n "$password" ]; then echo 'fail: configure file password not set'; exit 2; fi
  	if [ ! -n "$backup_dir" ]; then echo 'fail: configure file backup_dir not set'; exit 2; fi
	if [ ! -n "$xtrabackup_dir" ]; then echo 'fail: configure file xtrabackup_dir not set'; exit 2; fi
  	if [ ! -n "$full_backup_week_day" ]; then echo 'fail: configure file full_backup_week_day not set'; exit 2; fi
  	if [ ! -n "$full_backup_prefix" ]; then echo 'fail: configure file full_backup_prefix not set'; exit 2; fi
  	if [ ! -n "$increment_prefix" ]; then echo 'fail: configure file increment_prefix not set'; exit 2; fi
	if [ ! -n "$cloneslave_prefix" ]; then echo 'fail: configure file cloneslave_prefix not set'; exit 2; fi
  	if [ ! -n "$mysql_conf_file" ]; then echo 'fail: configure file mysql_conf_file not set'; exit 2; fi
	if [ ! -n "$mysql_socket_file" ]; then echo 'fail: configure file mysql_socket_file not set'; exit 2; fi
  	if [ ! -n "$error_log" ]; then echo 'fail: configure file error_log not set'; exit 2; fi
  	if [ ! -n "$index_file" ]; then echo 'fail: configure file index_file not set'; exit 2; fi
	if [ ! -n "$log_dir" ]; then echo 'fail: configure file log_dir not set'; exit 2; fi
	if [ ! -n "$var_dir" ]; then echo 'fail: configure file var_dir not set'; exit 2; fi
	if [ ! -n "$parallel" ]; then echo 'fail: configure file parallel not set'; exit 2; fi
	if [ ! -n "$throttle" ]; then echo 'fail: configure file throttle not set'; exit 2; fi
	if [ ! -n "$dest_ip" ]; then echo 'fail: configure file dest_ip not set'; exit 2; fi
	if [ ! -n "$storage_backup" ]; then echo 'fail: configure file storage_backup not set'; exit 2; fi
	if [ ! -n "$storage_binlogs" ]; then echo 'fail: configure file storage_binlogs not set'; exit 2; fi
	if [ ! -n "$innobackupex_log" ]; then echo 'fail: configure file innobackupex_log not set'; exit 2; fi
	if [ ! -n "$backup_date" ]; then echo 'fail: configure file backup_date not set'; exit 2; fi
	if [ ! -n "$backup_time" ]; then echo 'fail: configure file backup_time not set'; exit 2; fi
	if [ ! -n "$backup_week_day" ]; then echo 'fail: configure file backup_week_day not set'; exit 2; fi
	if [ ! -n "$default_error_file" ]; then echo 'fail: configure file default_error_file not set'; exit 2; fi
	if [ ! -n "$default_index_file" ]; then echo 'fail: configure file default_index_file not set'; exit 2; fi
	if [ ! -n "$mode" ]; then echo 'fail: configure file mode not set'; exit 2; fi
}

# 执行
function incr_run() {
	# 检测配置文件值
	test_conf_file
	# 判断执行全量备份还是增量备份
	get_backup_type
	backup_type=$?
	case ${backup_type} in
	0 )
		# 全量备份
		full_backup
		backup_0k=$?
		if [ 0 -eq "${backup_0k}" ]; then
		    # 全备成功
			# # 打包最新备份
			# tar_backup_file ${full_backup_prefix}
			# # 将tar备份发送到远程
			# send_backup_to_remote ${full_backup_prefix}
			# 发送备份到远程
                        send_backup_to_remote ${full_backup_prefix}
			# 备份索引文件
			backup_index_file
			# # 发送索引文件到远程
			# send_index_file_to_remote
			# 清除之前备份
			delete_before_backup
			# 清除索引文件
			purge_index_from_file
			# 添加索引,索引记录了当前最新的备份
			append_index_to_file ${full_backup_prefix}
			# 发送索引文件到远程
			send_index_file_to_remote
		else
		    # 全备失败
			# 删除备份目录
			rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
			# 记录错误日志
			logging_backup_err ${full_backup_prefix}
			# 发送错误日志信息到远程
			send_error_file_to_remote

		fi
	  ;;
	1 )
		# 增量备份
		increment_backup
		backup_ok=$?
		if [ 0 -eq "${backup_ok}" ]; then
		    # 增量备份成功
			# 打包最新备份
			# # tar_backup_file ${increment_prefix}
			# # 将tar备份发送到远程
			# send_backup_to_remote ${increment_prefix}
			# 发送备份到远程
                	send_backup_to_remote ${increment_prefix}
			# 添加索引, 索引记录了当前最新的备份
			append_index_to_file ${increment_prefix}
                        # 发送索引文件到远程
                        send_index_file_to_remote
		else
		    # 增量备份失败
			# 删除备份目录
			rm -rf ${backup_dir}/${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}
			# 记录错误日志
			logging_backup_err ${increment_prefix}
			# 发送错误日志信息到远程
                        send_error_file_to_remote
		fi
	  ;;
	esac
}

function clone_run() {
	# 检测配置文件值
	test_conf_file
	# 克隆从库
	cloneslave_backup
	backup_0k=$?
	if [ 0 -eq "${backup_0k}" ]; then
	    # 克隆备份成功
		# # 打包最新备份
                # tar_backup_file ${cloneslave_prefix}
                # 发送备份到远程
                send_backup_to_remote ${cloneslave_prefix}
		# 备份索引文件
                backup_index_file
		# 清除之前备份
                delete_before_backup
                # 清除索引文件
                purge_index_from_file
		# 添加索引,索引记录了当前最新的备份
		append_index_to_file ${cloneslave_prefix}
                # 发送索引文件到远程
                send_index_file_to_remote
	else
		# 全备失败
		# 删除备份目录
		rm -rf ${backup_dir}/${cloneslave_prefix}_${backup_date}_${backup_time}_${backup_week_day}
		# 记录错误日志
		logging_backup_err ${cloneslave_prefix}
		# 发送错误日志信息到远程
                send_error_file_to_remote
	fi
}

function full_run() {
	# 检测配置文件值
        test_conf_file
	# 判断MySQL版本,然后选择合适的备份方案
	get_mysql_version
	case ${backup_mysql} in
            0)
                # HIGO全量备份(5.6.16)
                higo_extra_full_backup
            ;;
            1)
                # HIGO全量备份(5.7.16+)
                higo_full_backup
            ;;
        esac
	# XXXX全量备份
	# higo_full_backup
	backup_0k=$?
	if [ 0 -eq "${backup_0k}" ]; then
	    # 全备成功
		# # 打包最新备份
		# tar_backup_file ${full_backup_prefix}
		# 发送备份到远程
		send_backup_to_remote ${full_backup_prefix}
		# 备份索引文件
		backup_index_file
		# 清除之前备份
		delete_before_backup
		# 清除索引文件
		purge_index_from_file
		# 添加索引,索引记录了当前最新的备份
		append_index_to_file ${full_backup_prefix}
		# 发送索引文件到远程
                send_index_file_to_remote
	else
	    # 全备失败
		# 删除备份目录
		rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
		# 记录错误日志
		logging_backup_err ${full_backup_prefix}
		# 发送错误日志信息到远程
		send_error_file_to_remote
	fi
}

function main() {
	# 判断执行那种备份策略
	get_backup_strategy
	case ${backup_strategy} in
	    0)
		# 执行增量备份
		incr_run
	    ;;
	    1)
		# 执行克隆备份
		clone_run
	    ;;
	    2)
		# 仅全备
		full_run
	    ;;
	esac
}
main

猜你喜欢

转载自blog.csdn.net/weixin_42018518/article/details/88887182