阅读背景:

linux下的mysql自动备份shell

来源:互联网 

#!/bin/bash

# mysql 的备份脚本
# 备份原理:
# 1
#   应用罗列出所有的库;
# 2
#   应用每一个库,罗列出每张表,除指定疏忽的库;
# 3
#   应用mysqldump 导出每张表到文件:主机名/年月日/库/表.mysqldump.sql
# 4
#   验证每张表的sql文件是不是包括完成标记;
# 5
#	紧缩每一个sql文件并删除本sql文件
# 6
#	强迫删除超过x天的备份文件夹全体文件
# 7
#	发送处置日志到指定email
# 8
# 	请配合同步工具多处服务器备份

# mysql备份配置信息

mysqlBackupUser="backuper"
# 密码不要包括"号
mysqlBackupPwd="**#&&&#ddddddd("
# 日志文件路径/var/log/文件名.log,只记载每次运行的日志
# 不备份的数据库名称,每一个名称应用()号包住,如不备份 abc.d 和 abc.e二个数据库,就拼写成"(abc.d)(abc.e)",名字不辨别大小写
notBackupDatabases="(mysql)(information_schema)(performance_schema)"
#备份的目录,后面须要加/
backupRoot="/var/backup/hostname-mysql-data/"
# 删除存在大于以下天数的备份目录
deleteRootOutDays=30
#必需是完全的email地址,由于正面的命令应用到
smtpUser="[email protected]"
#smtp://协定是必需的
smtpHost="smtp://smtp.qq.com:25"
#密码不能包括又引号避免shell出错
smtpPwd="pwd"
smtpTo="[email protected]"
smtpSubject="主机上的mysql主动备份脚本履行信息"
# 配置停止行

shName=$(basename 
          

#!/bin/bash

# mysql 的备份脚本
# 备份原理:
# 1
#   应用罗列出所有的库;
# 2
#   应用每一个库,罗列出每张表,除指定疏忽的库;
# 3
#   应用mysqldump 导出每张表到文件:主机名/年月日/库/表.mysqldump.sql
# 4
#   验证每张表的sql文件是不是包括完成标记;
# 5
#	紧缩每一个sql文件并删除本sql文件
# 6
#	强迫删除超过x天的备份文件夹全体文件
# 7
#	发送处置日志到指定email
# 8
# 	请配合同步工具多处服务器备份

# mysql备份配置信息

mysqlBackupUser="backuper"
# 密码不要包括"号
mysqlBackupPwd="**#&&&#ddddddd("
# 日志文件路径/var/log/文件名.log,只记载每次运行的日志
# 不备份的数据库名称,每一个名称应用()号包住,如不备份 abc.d 和 abc.e二个数据库,就拼写成"(abc.d)(abc.e)",名字不辨别大小写
notBackupDatabases="(mysql)(information_schema)(performance_schema)"
#备份的目录,后面须要加/
backupRoot="/var/backup/hostname-mysql-data/"
# 删除存在大于以下天数的备份目录
deleteRootOutDays=30
#必需是完全的email地址,由于正面的命令应用到
smtpUser="[email protected]"
#smtp://协定是必需的
smtpHost="smtp://smtp.qq.com:25"
#密码不能包括又引号避免shell出错
smtpPwd="pwd"
smtpTo="[email protected]"
smtpSubject="主机上的mysql主动备份脚本履行信息"
# 配置停止行

shName=$(basename $0)
shLogPath="/var/log/${shName}.log"

ver=$(realpath --version 2>&1)

if [ "$?" -ne "0" ];then
    echo "测试realpath --version的版本时出错,中断,出错信息:${ver}"
    exit 10
fi

echo -e "$(date "+%Y-%m-%d %R:%S") By $(realpath ${0})\n" > $shLogPath

function myExit(){
    exitCode=$1
    ver=$(mailx -V 2>&1)
    appendLog "退出时光:$(date +%Y-%m-%d/%R:%S)"
    appendLog "服务器信息:\n$(ifconfig 2>&1)"

    if [ "$?" -ne "0" ];then
        appendLog "测试用来发送email的命令mailx时出错,请安装,如centos应用yum install mailx,疏忽发送email通知的步骤,出错信息:${ver}"
    else
        #发送email
        mailInfo=$(mailx -v -s "${smtpSubject}" -S from="${smtpUser}"  -S smtp-auth="login" -S smtp="${smtpHost}" -S smtp-auth-user="${smtpUser}" -S smtp-auth-password="${smtpPwd}" -S ssl-verify=ignore  "${smtpTo}" < $shLogPath 2>&1)
        # 没法附加发送进程的日志给email通知中,所以,只能保留到日志中,如果须要懂得email的交互进程,请到日志文件中查看
        appendLog "退出时光到发送email的时光:$(date +%Y-%m-%d/%R:%S)\n应用mailx发送emial通知交互以下:\n\n${mailInfo}"
    fi

    exit $exitCode
}

# 追加日志
function appendLog(){
    echo -e "${1} \n" >> $shLogPath
}

if [ ! -e "${backupRoot}" ];then
    appendLog "备份根目录 ${backupRoot} 不存在,已创立"
    mkInfo=$(mkdir -p $backupRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立备份目录 ${backupRoot}失败:${mkInfo}"
        myExit 1
    fi

elif [ ! -d "${backupRoot}" ];then
    appendLog "备份根目录路径虽然存在,但是它不是目录,中断:${backupRoot}"
    myExit 2
fi

#今天的备份目录
todayRoot="${backupRoot}$(date +%Y%m%d%H)/"

if [ ! -e "${todayRoot}" ];then
    mkInfo=$(mkdir $todayRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立本轮的备份目录 ${todayRoot} 失败,中断:${mkInfo}"
        myExit 3
    fi
fi

appendLog "今天的备份目录:${todayRoot}"
ver=$(mysql --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysql的版本时出错,中断,出错信息:${ver}"
    myExit 4
fi

ver=$(mysqldump -V 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysqldump命令出错,请安装,中断,出错信息:${ver}"
    myExit 5
fi

ver=$(tail --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tail命令的版本时出错,中断,出错信息:${ver}"
    myExit 41
fi

ver=$(tar  --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tar命令的版本时出错,中断,出错信息:${ver}"
    myExit 42
fi

databases=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show databases;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库名时出错,中断:${databases}"
    myExit 6
else
    appendLog "全体的数据库名称列表以下:\n ${databases}"
fi


for database in $databases; do
    # 匹配时不辨别大小写
    echo $notBackupDatabases|grep -i "(${database})" >/dev/null

    # 属于不须要备份的库
    if [ "$?" -eq "0" ];then
        appendLog "数据库 ${database} 被指定不须要备份,跳过"
        continue
    fi

    databaseRoot="${todayRoot}${database}/"

    if [ ! -e "${databaseRoot}" ];then
        mkInfo=$(mkdir $databaseRoot 2>&1)

        if [ "$?" -ne "0" ];then
            appendLog "尝试创立数据库 ${databaseRoot} 的目录失败,中断:${mkInfo}"
            myExit 7
        fi
    fi


    tables=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show tables from \`${database}\`;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库 ${database} 表的列表时出错,中断:${tables}"
    myExit 8
else
    appendLog "${database}数据库表的全体列表以下:\n ${tables}"
fi

    for table in $tables; do
        sqlPath="${databaseRoot}${table}.sql"
        timeStart="开端dump时光点: $(date +%Y-%m-%d/%R:%S)"
        dumpInfo=$(mysqldump --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --dump-date --comments --quote-names --result-file="${sqlPath}" --quick  --databases "${database}" --tables "${table}" 2>&1 )
        timeEnd="完成dump时光点: $(date +%Y-%m-%d/%R:%S)"

        if [ "$?" -ne "0" ];then
            appendLog "尝试导出数据库 ${database}的表 ${table} 失败,中断:${dumpInfo}"
            myExit 9
        else
            appendLog "导出数据库 ${database}的表 ${table} 到 ${sqlPath} 胜利:${dumpInfo}; 耗时: 从 ${timeStart} 至 ${timeEnd}"

            tail --lines=10 "${sqlPath}" |grep "\-\- Dump completed" 2>&1 > /dev/null

            if [ "$?" -ne "0" ];then
                appendLog "没有发发明内容中的 "Dump completed" 正常完成标记字符,请检讨dump文件${sqlPath},请登录ssh查看此文件是不是备份胜利"
            else
                appendLog "检测到备份文件内容中的"Dump completed"标记字符,dump文件${sqlPath}应当备份胜利了"
            fi

        fi

    done

done

appendLog "\n ------数据库备份全体完成------\n"

# 开端紧缩,把紧缩放到备份停止是避免紧缩时光太长,如果涌现锁表,会影响网站运行
sqls=$(ls --almost-all --ignore-backups --indicator-style=slash -1 ${todayRoot}*/*.sql 2>&1)

for path in $sqls; do
    #路径中包括了绝对路径,tar命令还须要改良
    sqlDir=$(dirname $path)
    sql=$(basename $path)
    tarInfo=$(tar --create --remove-files --bzip2 --absolute-names --directory="${sqlDir}"   --add-file="${sql}" --file="${path}.tar.bz2")

    if [ "$?" -ne "0" ];then
        appendLog "紧缩并删除${path}文件时出错:\n${tarInfo}"
    else
        appendLog "已紧缩并删除${path}"
    fi
done

appendLog "------完成紧缩操作-----"
#开端清算大于x天的备份

daysDir=$(ls --almost-all --ignore-backups --indicator-style=slash -1 "${backupRoot}" 2>&1)

for bkDir in $daysDir;do
    bkDir="${backupRoot}${bkDir}"

    if [ ! -d "${bkDir}" ];then
        appendLog "预备删除过期的备份操作时,由于${bkDir}不是一个目录,跳过"
        continue
    fi

    dirName=$(basename $bkDir)
    #test
    echo $dirName | grep -P "^\d{10}$" 2>&1 >/dev/null

    if [ "$?" -ne "0" ];then
        appendLog "预备删除过期备份目录时,检测到待删除目录名不是10位数字,跳过:${bkDir}"
        continue
    fi

    outDay=$(date --date="-${deleteRootOutDays}day" "+%Y%m%d00")

    #如果文件时光小于这个过期时光那末就强迫删除全部目录
    if [ "${dirName}" -lt "${outDay}" ];then
        rmInfo=$(rm --force --preserve-root --recursive "${bkDir}" 2>&1)
        appendLog "发明一个过期备份目录 ${bkDir},已超过 ${deleteRootOutDays} 天,也就是小于${outDay}就会被删除 ,被强迫删除状况(0为胜利):${?} ${rmInfo};"
    fi

done

appendLog "------完成清算过期备份文件夹操作----"
appendLog "空间应用情形以下:\n $(df -h)"
appendLog "当前备份文件占用空间情形:\n $(du -hs ${todayRoot})"
myExit 0

) shLogPath="/var/log/${shName}.log" ver=$(realpath --version 2>&1) if [ "$?" -ne "0" ];then echo "测试realpath --version的版本时出错,中断,出错信息:${ver}" exit 10 fi echo -e "$(date "+%Y-%m-%d %R:%S") By $(realpath

#!/bin/bash

# mysql 的备份脚本
# 备份原理:
# 1
#   应用罗列出所有的库;
# 2
#   应用每一个库,罗列出每张表,除指定疏忽的库;
# 3
#   应用mysqldump 导出每张表到文件:主机名/年月日/库/表.mysqldump.sql
# 4
#   验证每张表的sql文件是不是包括完成标记;
# 5
#	紧缩每一个sql文件并删除本sql文件
# 6
#	强迫删除超过x天的备份文件夹全体文件
# 7
#	发送处置日志到指定email
# 8
# 	请配合同步工具多处服务器备份

# mysql备份配置信息

mysqlBackupUser="backuper"
# 密码不要包括"号
mysqlBackupPwd="**#&&&#ddddddd("
# 日志文件路径/var/log/文件名.log,只记载每次运行的日志
# 不备份的数据库名称,每一个名称应用()号包住,如不备份 abc.d 和 abc.e二个数据库,就拼写成"(abc.d)(abc.e)",名字不辨别大小写
notBackupDatabases="(mysql)(information_schema)(performance_schema)"
#备份的目录,后面须要加/
backupRoot="/var/backup/hostname-mysql-data/"
# 删除存在大于以下天数的备份目录
deleteRootOutDays=30
#必需是完全的email地址,由于正面的命令应用到
smtpUser="[email protected]"
#smtp://协定是必需的
smtpHost="smtp://smtp.qq.com:25"
#密码不能包括又引号避免shell出错
smtpPwd="pwd"
smtpTo="[email protected]"
smtpSubject="主机上的mysql主动备份脚本履行信息"
# 配置停止行

shName=$(basename $0)
shLogPath="/var/log/${shName}.log"

ver=$(realpath --version 2>&1)

if [ "$?" -ne "0" ];then
    echo "测试realpath --version的版本时出错,中断,出错信息:${ver}"
    exit 10
fi

echo -e "$(date "+%Y-%m-%d %R:%S") By $(realpath ${0})\n" > $shLogPath

function myExit(){
    exitCode=$1
    ver=$(mailx -V 2>&1)
    appendLog "退出时光:$(date +%Y-%m-%d/%R:%S)"
    appendLog "服务器信息:\n$(ifconfig 2>&1)"

    if [ "$?" -ne "0" ];then
        appendLog "测试用来发送email的命令mailx时出错,请安装,如centos应用yum install mailx,疏忽发送email通知的步骤,出错信息:${ver}"
    else
        #发送email
        mailInfo=$(mailx -v -s "${smtpSubject}" -S from="${smtpUser}"  -S smtp-auth="login" -S smtp="${smtpHost}" -S smtp-auth-user="${smtpUser}" -S smtp-auth-password="${smtpPwd}" -S ssl-verify=ignore  "${smtpTo}" < $shLogPath 2>&1)
        # 没法附加发送进程的日志给email通知中,所以,只能保留到日志中,如果须要懂得email的交互进程,请到日志文件中查看
        appendLog "退出时光到发送email的时光:$(date +%Y-%m-%d/%R:%S)\n应用mailx发送emial通知交互以下:\n\n${mailInfo}"
    fi

    exit $exitCode
}

# 追加日志
function appendLog(){
    echo -e "${1} \n" >> $shLogPath
}

if [ ! -e "${backupRoot}" ];then
    appendLog "备份根目录 ${backupRoot} 不存在,已创立"
    mkInfo=$(mkdir -p $backupRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立备份目录 ${backupRoot}失败:${mkInfo}"
        myExit 1
    fi

elif [ ! -d "${backupRoot}" ];then
    appendLog "备份根目录路径虽然存在,但是它不是目录,中断:${backupRoot}"
    myExit 2
fi

#今天的备份目录
todayRoot="${backupRoot}$(date +%Y%m%d%H)/"

if [ ! -e "${todayRoot}" ];then
    mkInfo=$(mkdir $todayRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立本轮的备份目录 ${todayRoot} 失败,中断:${mkInfo}"
        myExit 3
    fi
fi

appendLog "今天的备份目录:${todayRoot}"
ver=$(mysql --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysql的版本时出错,中断,出错信息:${ver}"
    myExit 4
fi

ver=$(mysqldump -V 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysqldump命令出错,请安装,中断,出错信息:${ver}"
    myExit 5
fi

ver=$(tail --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tail命令的版本时出错,中断,出错信息:${ver}"
    myExit 41
fi

ver=$(tar  --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tar命令的版本时出错,中断,出错信息:${ver}"
    myExit 42
fi

databases=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show databases;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库名时出错,中断:${databases}"
    myExit 6
else
    appendLog "全体的数据库名称列表以下:\n ${databases}"
fi


for database in $databases; do
    # 匹配时不辨别大小写
    echo $notBackupDatabases|grep -i "(${database})" >/dev/null

    # 属于不须要备份的库
    if [ "$?" -eq "0" ];then
        appendLog "数据库 ${database} 被指定不须要备份,跳过"
        continue
    fi

    databaseRoot="${todayRoot}${database}/"

    if [ ! -e "${databaseRoot}" ];then
        mkInfo=$(mkdir $databaseRoot 2>&1)

        if [ "$?" -ne "0" ];then
            appendLog "尝试创立数据库 ${databaseRoot} 的目录失败,中断:${mkInfo}"
            myExit 7
        fi
    fi


    tables=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show tables from \`${database}\`;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库 ${database} 表的列表时出错,中断:${tables}"
    myExit 8
else
    appendLog "${database}数据库表的全体列表以下:\n ${tables}"
fi

    for table in $tables; do
        sqlPath="${databaseRoot}${table}.sql"
        timeStart="开端dump时光点: $(date +%Y-%m-%d/%R:%S)"
        dumpInfo=$(mysqldump --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --dump-date --comments --quote-names --result-file="${sqlPath}" --quick  --databases "${database}" --tables "${table}" 2>&1 )
        timeEnd="完成dump时光点: $(date +%Y-%m-%d/%R:%S)"

        if [ "$?" -ne "0" ];then
            appendLog "尝试导出数据库 ${database}的表 ${table} 失败,中断:${dumpInfo}"
            myExit 9
        else
            appendLog "导出数据库 ${database}的表 ${table} 到 ${sqlPath} 胜利:${dumpInfo}; 耗时: 从 ${timeStart} 至 ${timeEnd}"

            tail --lines=10 "${sqlPath}" |grep "\-\- Dump completed" 2>&1 > /dev/null

            if [ "$?" -ne "0" ];then
                appendLog "没有发发明内容中的 "Dump completed" 正常完成标记字符,请检讨dump文件${sqlPath},请登录ssh查看此文件是不是备份胜利"
            else
                appendLog "检测到备份文件内容中的"Dump completed"标记字符,dump文件${sqlPath}应当备份胜利了"
            fi

        fi

    done

done

appendLog "\n ------数据库备份全体完成------\n"

# 开端紧缩,把紧缩放到备份停止是避免紧缩时光太长,如果涌现锁表,会影响网站运行
sqls=$(ls --almost-all --ignore-backups --indicator-style=slash -1 ${todayRoot}*/*.sql 2>&1)

for path in $sqls; do
    #路径中包括了绝对路径,tar命令还须要改良
    sqlDir=$(dirname $path)
    sql=$(basename $path)
    tarInfo=$(tar --create --remove-files --bzip2 --absolute-names --directory="${sqlDir}"   --add-file="${sql}" --file="${path}.tar.bz2")

    if [ "$?" -ne "0" ];then
        appendLog "紧缩并删除${path}文件时出错:\n${tarInfo}"
    else
        appendLog "已紧缩并删除${path}"
    fi
done

appendLog "------完成紧缩操作-----"
#开端清算大于x天的备份

daysDir=$(ls --almost-all --ignore-backups --indicator-style=slash -1 "${backupRoot}" 2>&1)

for bkDir in $daysDir;do
    bkDir="${backupRoot}${bkDir}"

    if [ ! -d "${bkDir}" ];then
        appendLog "预备删除过期的备份操作时,由于${bkDir}不是一个目录,跳过"
        continue
    fi

    dirName=$(basename $bkDir)
    #test
    echo $dirName | grep -P "^\d{10}$" 2>&1 >/dev/null

    if [ "$?" -ne "0" ];then
        appendLog "预备删除过期备份目录时,检测到待删除目录名不是10位数字,跳过:${bkDir}"
        continue
    fi

    outDay=$(date --date="-${deleteRootOutDays}day" "+%Y%m%d00")

    #如果文件时光小于这个过期时光那末就强迫删除全部目录
    if [ "${dirName}" -lt "${outDay}" ];then
        rmInfo=$(rm --force --preserve-root --recursive "${bkDir}" 2>&1)
        appendLog "发明一个过期备份目录 ${bkDir},已超过 ${deleteRootOutDays} 天,也就是小于${outDay}就会被删除 ,被强迫删除状况(0为胜利):${?} ${rmInfo};"
    fi

done

appendLog "------完成清算过期备份文件夹操作----"
appendLog "空间应用情形以下:\n $(df -h)"
appendLog "当前备份文件占用空间情形:\n $(du -hs ${todayRoot})"
myExit 0

)\n" > $shLogPath function myExit(){ exitCode=

#!/bin/bash

# mysql 的备份脚本
# 备份原理:
# 1
#   应用罗列出所有的库;
# 2
#   应用每一个库,罗列出每张表,除指定疏忽的库;
# 3
#   应用mysqldump 导出每张表到文件:主机名/年月日/库/表.mysqldump.sql
# 4
#   验证每张表的sql文件是不是包括完成标记;
# 5
#	紧缩每一个sql文件并删除本sql文件
# 6
#	强迫删除超过x天的备份文件夹全体文件
# 7
#	发送处置日志到指定email
# 8
# 	请配合同步工具多处服务器备份

# mysql备份配置信息

mysqlBackupUser="backuper"
# 密码不要包括"号
mysqlBackupPwd="**#&&&#ddddddd("
# 日志文件路径/var/log/文件名.log,只记载每次运行的日志
# 不备份的数据库名称,每一个名称应用()号包住,如不备份 abc.d 和 abc.e二个数据库,就拼写成"(abc.d)(abc.e)",名字不辨别大小写
notBackupDatabases="(mysql)(information_schema)(performance_schema)"
#备份的目录,后面须要加/
backupRoot="/var/backup/hostname-mysql-data/"
# 删除存在大于以下天数的备份目录
deleteRootOutDays=30
#必需是完全的email地址,由于正面的命令应用到
smtpUser="[email protected]"
#smtp://协定是必需的
smtpHost="smtp://smtp.qq.com:25"
#密码不能包括又引号避免shell出错
smtpPwd="pwd"
smtpTo="[email protected]"
smtpSubject="主机上的mysql主动备份脚本履行信息"
# 配置停止行

shName=$(basename $0)
shLogPath="/var/log/${shName}.log"

ver=$(realpath --version 2>&1)

if [ "$?" -ne "0" ];then
    echo "测试realpath --version的版本时出错,中断,出错信息:${ver}"
    exit 10
fi

echo -e "$(date "+%Y-%m-%d %R:%S") By $(realpath ${0})\n" > $shLogPath

function myExit(){
    exitCode=$1
    ver=$(mailx -V 2>&1)
    appendLog "退出时光:$(date +%Y-%m-%d/%R:%S)"
    appendLog "服务器信息:\n$(ifconfig 2>&1)"

    if [ "$?" -ne "0" ];then
        appendLog "测试用来发送email的命令mailx时出错,请安装,如centos应用yum install mailx,疏忽发送email通知的步骤,出错信息:${ver}"
    else
        #发送email
        mailInfo=$(mailx -v -s "${smtpSubject}" -S from="${smtpUser}"  -S smtp-auth="login" -S smtp="${smtpHost}" -S smtp-auth-user="${smtpUser}" -S smtp-auth-password="${smtpPwd}" -S ssl-verify=ignore  "${smtpTo}" < $shLogPath 2>&1)
        # 没法附加发送进程的日志给email通知中,所以,只能保留到日志中,如果须要懂得email的交互进程,请到日志文件中查看
        appendLog "退出时光到发送email的时光:$(date +%Y-%m-%d/%R:%S)\n应用mailx发送emial通知交互以下:\n\n${mailInfo}"
    fi

    exit $exitCode
}

# 追加日志
function appendLog(){
    echo -e "${1} \n" >> $shLogPath
}

if [ ! -e "${backupRoot}" ];then
    appendLog "备份根目录 ${backupRoot} 不存在,已创立"
    mkInfo=$(mkdir -p $backupRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立备份目录 ${backupRoot}失败:${mkInfo}"
        myExit 1
    fi

elif [ ! -d "${backupRoot}" ];then
    appendLog "备份根目录路径虽然存在,但是它不是目录,中断:${backupRoot}"
    myExit 2
fi

#今天的备份目录
todayRoot="${backupRoot}$(date +%Y%m%d%H)/"

if [ ! -e "${todayRoot}" ];then
    mkInfo=$(mkdir $todayRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立本轮的备份目录 ${todayRoot} 失败,中断:${mkInfo}"
        myExit 3
    fi
fi

appendLog "今天的备份目录:${todayRoot}"
ver=$(mysql --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysql的版本时出错,中断,出错信息:${ver}"
    myExit 4
fi

ver=$(mysqldump -V 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysqldump命令出错,请安装,中断,出错信息:${ver}"
    myExit 5
fi

ver=$(tail --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tail命令的版本时出错,中断,出错信息:${ver}"
    myExit 41
fi

ver=$(tar  --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tar命令的版本时出错,中断,出错信息:${ver}"
    myExit 42
fi

databases=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show databases;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库名时出错,中断:${databases}"
    myExit 6
else
    appendLog "全体的数据库名称列表以下:\n ${databases}"
fi


for database in $databases; do
    # 匹配时不辨别大小写
    echo $notBackupDatabases|grep -i "(${database})" >/dev/null

    # 属于不须要备份的库
    if [ "$?" -eq "0" ];then
        appendLog "数据库 ${database} 被指定不须要备份,跳过"
        continue
    fi

    databaseRoot="${todayRoot}${database}/"

    if [ ! -e "${databaseRoot}" ];then
        mkInfo=$(mkdir $databaseRoot 2>&1)

        if [ "$?" -ne "0" ];then
            appendLog "尝试创立数据库 ${databaseRoot} 的目录失败,中断:${mkInfo}"
            myExit 7
        fi
    fi


    tables=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show tables from \`${database}\`;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库 ${database} 表的列表时出错,中断:${tables}"
    myExit 8
else
    appendLog "${database}数据库表的全体列表以下:\n ${tables}"
fi

    for table in $tables; do
        sqlPath="${databaseRoot}${table}.sql"
        timeStart="开端dump时光点: $(date +%Y-%m-%d/%R:%S)"
        dumpInfo=$(mysqldump --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --dump-date --comments --quote-names --result-file="${sqlPath}" --quick  --databases "${database}" --tables "${table}" 2>&1 )
        timeEnd="完成dump时光点: $(date +%Y-%m-%d/%R:%S)"

        if [ "$?" -ne "0" ];then
            appendLog "尝试导出数据库 ${database}的表 ${table} 失败,中断:${dumpInfo}"
            myExit 9
        else
            appendLog "导出数据库 ${database}的表 ${table} 到 ${sqlPath} 胜利:${dumpInfo}; 耗时: 从 ${timeStart} 至 ${timeEnd}"

            tail --lines=10 "${sqlPath}" |grep "\-\- Dump completed" 2>&1 > /dev/null

            if [ "$?" -ne "0" ];then
                appendLog "没有发发明内容中的 "Dump completed" 正常完成标记字符,请检讨dump文件${sqlPath},请登录ssh查看此文件是不是备份胜利"
            else
                appendLog "检测到备份文件内容中的"Dump completed"标记字符,dump文件${sqlPath}应当备份胜利了"
            fi

        fi

    done

done

appendLog "\n ------数据库备份全体完成------\n"

# 开端紧缩,把紧缩放到备份停止是避免紧缩时光太长,如果涌现锁表,会影响网站运行
sqls=$(ls --almost-all --ignore-backups --indicator-style=slash -1 ${todayRoot}*/*.sql 2>&1)

for path in $sqls; do
    #路径中包括了绝对路径,tar命令还须要改良
    sqlDir=$(dirname $path)
    sql=$(basename $path)
    tarInfo=$(tar --create --remove-files --bzip2 --absolute-names --directory="${sqlDir}"   --add-file="${sql}" --file="${path}.tar.bz2")

    if [ "$?" -ne "0" ];then
        appendLog "紧缩并删除${path}文件时出错:\n${tarInfo}"
    else
        appendLog "已紧缩并删除${path}"
    fi
done

appendLog "------完成紧缩操作-----"
#开端清算大于x天的备份

daysDir=$(ls --almost-all --ignore-backups --indicator-style=slash -1 "${backupRoot}" 2>&1)

for bkDir in $daysDir;do
    bkDir="${backupRoot}${bkDir}"

    if [ ! -d "${bkDir}" ];then
        appendLog "预备删除过期的备份操作时,由于${bkDir}不是一个目录,跳过"
        continue
    fi

    dirName=$(basename $bkDir)
    #test
    echo $dirName | grep -P "^\d{10}$" 2>&1 >/dev/null

    if [ "$?" -ne "0" ];then
        appendLog "预备删除过期备份目录时,检测到待删除目录名不是10位数字,跳过:${bkDir}"
        continue
    fi

    outDay=$(date --date="-${deleteRootOutDays}day" "+%Y%m%d00")

    #如果文件时光小于这个过期时光那末就强迫删除全部目录
    if [ "${dirName}" -lt "${outDay}" ];then
        rmInfo=$(rm --force --preserve-root --recursive "${bkDir}" 2>&1)
        appendLog "发明一个过期备份目录 ${bkDir},已超过 ${deleteRootOutDays} 天,也就是小于${outDay}就会被删除 ,被强迫删除状况(0为胜利):${?} ${rmInfo};"
    fi

done

appendLog "------完成清算过期备份文件夹操作----"
appendLog "空间应用情形以下:\n $(df -h)"
appendLog "当前备份文件占用空间情形:\n $(du -hs ${todayRoot})"
myExit 0

ver=$(mailx -V 2>&1) appendLog "退出时光:$(date +%Y-%m-%d/%R:%S)" appendLog "服务器信息:\n$(ifconfig 2>&1)" if [ "$?" -ne "0" ];then appendLog "测试用来发送email的命令mailx时出错,请安装,如centos应用yum install mailx,疏忽发送email通知的步骤,出错信息:${ver}" else #发送email mailInfo=$(mailx -v -s "${smtpSubject}" -S from="${smtpUser}" -S smtp-auth="login" -S smtp="${smtpHost}" -S smtp-auth-user="${smtpUser}" -S smtp-auth-password="${smtpPwd}" -S ssl-verify=ignore "${smtpTo}" < $shLogPath 2>&1) # 没法附加发送进程的日志给email通知中,所以,只能保留到日志中,如果须要懂得email的交互进程,请到日志文件中查看 appendLog "退出时光到发送email的时光:$(date +%Y-%m-%d/%R:%S)\n应用mailx发送emial通知交互以下:\n\n${mailInfo}" fi exit $exitCode } # 追加日志 function appendLog(){ echo -e "

#!/bin/bash

# mysql 的备份脚本
# 备份原理:
# 1
#   应用罗列出所有的库;
# 2
#   应用每一个库,罗列出每张表,除指定疏忽的库;
# 3
#   应用mysqldump 导出每张表到文件:主机名/年月日/库/表.mysqldump.sql
# 4
#   验证每张表的sql文件是不是包括完成标记;
# 5
#	紧缩每一个sql文件并删除本sql文件
# 6
#	强迫删除超过x天的备份文件夹全体文件
# 7
#	发送处置日志到指定email
# 8
# 	请配合同步工具多处服务器备份

# mysql备份配置信息

mysqlBackupUser="backuper"
# 密码不要包括"号
mysqlBackupPwd="**#&&&#ddddddd("
# 日志文件路径/var/log/文件名.log,只记载每次运行的日志
# 不备份的数据库名称,每一个名称应用()号包住,如不备份 abc.d 和 abc.e二个数据库,就拼写成"(abc.d)(abc.e)",名字不辨别大小写
notBackupDatabases="(mysql)(information_schema)(performance_schema)"
#备份的目录,后面须要加/
backupRoot="/var/backup/hostname-mysql-data/"
# 删除存在大于以下天数的备份目录
deleteRootOutDays=30
#必需是完全的email地址,由于正面的命令应用到
smtpUser="[email protected]"
#smtp://协定是必需的
smtpHost="smtp://smtp.qq.com:25"
#密码不能包括又引号避免shell出错
smtpPwd="pwd"
smtpTo="[email protected]"
smtpSubject="主机上的mysql主动备份脚本履行信息"
# 配置停止行

shName=$(basename $0)
shLogPath="/var/log/${shName}.log"

ver=$(realpath --version 2>&1)

if [ "$?" -ne "0" ];then
    echo "测试realpath --version的版本时出错,中断,出错信息:${ver}"
    exit 10
fi

echo -e "$(date "+%Y-%m-%d %R:%S") By $(realpath ${0})\n" > $shLogPath

function myExit(){
    exitCode=$1
    ver=$(mailx -V 2>&1)
    appendLog "退出时光:$(date +%Y-%m-%d/%R:%S)"
    appendLog "服务器信息:\n$(ifconfig 2>&1)"

    if [ "$?" -ne "0" ];then
        appendLog "测试用来发送email的命令mailx时出错,请安装,如centos应用yum install mailx,疏忽发送email通知的步骤,出错信息:${ver}"
    else
        #发送email
        mailInfo=$(mailx -v -s "${smtpSubject}" -S from="${smtpUser}"  -S smtp-auth="login" -S smtp="${smtpHost}" -S smtp-auth-user="${smtpUser}" -S smtp-auth-password="${smtpPwd}" -S ssl-verify=ignore  "${smtpTo}" < $shLogPath 2>&1)
        # 没法附加发送进程的日志给email通知中,所以,只能保留到日志中,如果须要懂得email的交互进程,请到日志文件中查看
        appendLog "退出时光到发送email的时光:$(date +%Y-%m-%d/%R:%S)\n应用mailx发送emial通知交互以下:\n\n${mailInfo}"
    fi

    exit $exitCode
}

# 追加日志
function appendLog(){
    echo -e "${1} \n" >> $shLogPath
}

if [ ! -e "${backupRoot}" ];then
    appendLog "备份根目录 ${backupRoot} 不存在,已创立"
    mkInfo=$(mkdir -p $backupRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立备份目录 ${backupRoot}失败:${mkInfo}"
        myExit 1
    fi

elif [ ! -d "${backupRoot}" ];then
    appendLog "备份根目录路径虽然存在,但是它不是目录,中断:${backupRoot}"
    myExit 2
fi

#今天的备份目录
todayRoot="${backupRoot}$(date +%Y%m%d%H)/"

if [ ! -e "${todayRoot}" ];then
    mkInfo=$(mkdir $todayRoot 2>&1)

    if [ "$?" -ne "0" ];then
        appendLog "尝试创立本轮的备份目录 ${todayRoot} 失败,中断:${mkInfo}"
        myExit 3
    fi
fi

appendLog "今天的备份目录:${todayRoot}"
ver=$(mysql --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysql的版本时出错,中断,出错信息:${ver}"
    myExit 4
fi

ver=$(mysqldump -V 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试mysqldump命令出错,请安装,中断,出错信息:${ver}"
    myExit 5
fi

ver=$(tail --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tail命令的版本时出错,中断,出错信息:${ver}"
    myExit 41
fi

ver=$(tar  --version 2>&1)

if [ "$?" -ne "0" ];then
    appendLog "测试tar命令的版本时出错,中断,出错信息:${ver}"
    myExit 42
fi

databases=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show databases;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库名时出错,中断:${databases}"
    myExit 6
else
    appendLog "全体的数据库名称列表以下:\n ${databases}"
fi


for database in $databases; do
    # 匹配时不辨别大小写
    echo $notBackupDatabases|grep -i "(${database})" >/dev/null

    # 属于不须要备份的库
    if [ "$?" -eq "0" ];then
        appendLog "数据库 ${database} 被指定不须要备份,跳过"
        continue
    fi

    databaseRoot="${todayRoot}${database}/"

    if [ ! -e "${databaseRoot}" ];then
        mkInfo=$(mkdir $databaseRoot 2>&1)

        if [ "$?" -ne "0" ];then
            appendLog "尝试创立数据库 ${databaseRoot} 的目录失败,中断:${mkInfo}"
            myExit 7
        fi
    fi


    tables=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}"  --password="${mysqlBackupPwd}" --execute="show tables from \`${database}\`;"  --silent --skip-column-names --unbuffered 2>&1)

if [ "$?" -ne "0" ]; then
    appendLog "尝试应用配置信息罗列mysql的数据库 ${database} 表的列表时出错,中断:${tables}"
    myExit 8
else
    appendLog "${database}数据库表的全体列表以下:\n ${tables}"
fi

    for table in $tables; do
        sqlPath="${databaseRoot}${table}.sql"
        timeStart="开端dump时光点: $(date +%Y-%m-%d/%R:%S)"
        dumpInfo=$(mysqldump --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --dump-date --comments --quote-names --result-file="${sqlPath}" --quick  --databases "${database}" --tables "${table}" 2>&1 )
        timeEnd="完成dump时光点: $(date +%Y-%m-%d/%R:%S)"

        if [ "$?" -ne "0" ];then
            appendLog "尝试导出数据库 ${database}的表 ${table} 失败,中断:${dumpInfo}"
            myExit 9
        else
            appendLog "导出数据库 ${database}的表 ${table} 到 ${sqlPath} 胜利:${dumpInfo}; 耗时: 从 ${timeStart} 至 ${timeEnd}"

            tail --lines=10 "${sqlPath}" |grep "\-\- Dump completed" 2>&1 > /dev/null

            if [ "$?" -ne "0" ];then
                appendLog "没有发发明内容中的 "Dump completed" 正常完成标记字符,请检讨dump文件${sqlPath},请登录ssh查看此文件是不是备份胜利"
            else
                appendLog "检测到备份文件内容中的"Dump completed"标记字符,dump文件${sqlPath}应当备份胜利了"
            fi

        fi

    done

done

appendLog "\n ------数据库备份全体完成------\n"

# 开端紧缩,把紧缩放到备份停止是避免紧缩时光太长,如果涌现锁表,会影响网站运行
sqls=$(ls --almost-all --ignore-backups --indicator-style=slash -1 ${todayRoot}*/*.sql 2>&1)

for path in $sqls; do
    #路径中包括了绝对路径,tar命令还须要改良
    sqlDir=$(dirname $path)
    sql=$(basename $path)
    tarInfo=$(tar --create --remove-files --bzip2 --absolute-names --directory="${sqlDir}"   --add-file="${sql}" --file="${path}.tar.bz2")

    if [ "$?" -ne "0" ];then
        appendLog "紧缩并删除${path}文件时出错:\n${tarInfo}"
    else
        appendLog "已紧缩并删除${path}"
    fi
done

appendLog "------完成紧缩操作-----"
#开端清算大于x天的备份

daysDir=$(ls --almost-all --ignore-backups --indicator-style=slash -1 "${backupRoot}" 2>&1)

for bkDir in $daysDir;do
    bkDir="${backupRoot}${bkDir}"

    if [ ! -d "${bkDir}" ];then
        appendLog "预备删除过期的备份操作时,由于${bkDir}不是一个目录,跳过"
        continue
    fi

    dirName=$(basename $bkDir)
    #test
    echo $dirName | grep -P "^\d{10}$" 2>&1 >/dev/null

    if [ "$?" -ne "0" ];then
        appendLog "预备删除过期备份目录时,检测到待删除目录名不是10位数字,跳过:${bkDir}"
        continue
    fi

    outDay=$(date --date="-${deleteRootOutDays}day" "+%Y%m%d00")

    #如果文件时光小于这个过期时光那末就强迫删除全部目录
    if [ "${dirName}" -lt "${outDay}" ];then
        rmInfo=$(rm --force --preserve-root --recursive "${bkDir}" 2>&1)
        appendLog "发明一个过期备份目录 ${bkDir},已超过 ${deleteRootOutDays} 天,也就是小于${outDay}就会被删除 ,被强迫删除状况(0为胜利):${?} ${rmInfo};"
    fi

done

appendLog "------完成清算过期备份文件夹操作----"
appendLog "空间应用情形以下:\n $(df -h)"
appendLog "当前备份文件占用空间情形:\n $(du -hs ${todayRoot})"
myExit 0

\n" >> $shLogPath } if [ ! -e "${backupRoot}" ];then appendLog "备份根目录 ${backupRoot} 不存在,已创立" mkInfo=$(mkdir -p $backupRoot 2>&1) if [ "$?" -ne "0" ];then appendLog "尝试创立备份目录 ${backupRoot}失败:${mkInfo}" myExit 1 fi elif [ ! -d "${backupRoot}" ];then appendLog "备份根目录路径虽然存在,但是它不是目录,中断:${backupRoot}" myExit 2 fi #今天的备份目录 todayRoot="${backupRoot}$(date +%Y%m%d%H)/" if [ ! -e "${todayRoot}" ];then mkInfo=$(mkdir $todayRoot 2>&1) if [ "$?" -ne "0" ];then appendLog "尝试创立本轮的备份目录 ${todayRoot} 失败,中断:${mkInfo}" myExit 3 fi fi appendLog "今天的备份目录:${todayRoot}" ver=$(mysql --version 2>&1) if [ "$?" -ne "0" ];then appendLog "测试mysql的版本时出错,中断,出错信息:${ver}" myExit 4 fi ver=$(mysqldump -V 2>&1) if [ "$?" -ne "0" ];then appendLog "测试mysqldump命令出错,请安装,中断,出错信息:${ver}" myExit 5 fi ver=$(tail --version 2>&1) if [ "$?" -ne "0" ];then appendLog "测试tail命令的版本时出错,中断,出错信息:${ver}" myExit 41 fi ver=$(tar --version 2>&1) if [ "$?" -ne "0" ];then appendLog "测试tar命令的版本时出错,中断,出错信息:${ver}" myExit 42 fi databases=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --execute="show databases;" --silent --skip-column-names --unbuffered 2>&1) if [ "$?" -ne "0" ]; then appendLog "尝试应用配置信息罗列mysql的数据库名时出错,中断:${databases}" myExit 6 else appendLog "全体的数据库名称列表以下:\n ${databases}" fi for database in $databases; do # 匹配时不辨别大小写 echo $notBackupDatabases|grep -i "(${database})" >/dev/null # 属于不须要备份的库 if [ "$?" -eq "0" ];then appendLog "数据库 ${database} 被指定不须要备份,跳过" continue fi databaseRoot="${todayRoot}${database}/" if [ ! -e "${databaseRoot}" ];then mkInfo=$(mkdir $databaseRoot 2>&1) if [ "$?" -ne "0" ];then appendLog "尝试创立数据库 ${databaseRoot} 的目录失败,中断:${mkInfo}" myExit 7 fi fi tables=$(mysql --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --execute="show tables from \`${database}\`;" --silent --skip-column-names --unbuffered 2>&1) if [ "$?" -ne "0" ]; then appendLog "尝试应用配置信息罗列mysql的数据库 ${database} 表的列表时出错,中断:${tables}" myExit 8 else appendLog "${database}数据库表的全体列表以下:\n ${tables}" fi for table in $tables; do sqlPath="${databaseRoot}${table}.sql" timeStart="开端dump时光点: $(date +%Y-%m-%d/%R:%S)" dumpInfo=$(mysqldump --host="127.0.0.1" --user="${mysqlBackupUser}" --password="${mysqlBackupPwd}" --dump-date --comments --quote-names --result-file="${sqlPath}" --quick --databases "${database}" --tables "${table}" 2>&1 ) timeEnd="完成dump时光点: $(date +%Y-%m-%d/%R:%S)" if [ "$?" -ne "0" ];then appendLog "尝试导出数据库 ${database}的表 ${table} 失败,中断:${dumpInfo}" myExit 9 else appendLog "导出数据库 ${database}的表 ${table} 到 ${sqlPath} 胜利:${dumpInfo}; 耗时: 从 ${timeStart} 至 ${timeEnd}" tail --lines=10 "${sqlPath}" |grep "\-\- Dump completed" 2>&1 > /dev/null if [ "$?" -ne "0" ];then appendLog "没有发发明内容中的 "Dump completed" 正常完成标记字符,请检讨dump文件${sqlPath},请登录ssh查看此文件是不是备份胜利" else appendLog "检测到备份文件内容中的"Dump completed"标记字符,dump文件${sqlPath}应当备份胜利了" fi fi done done appendLog "\n ------数据库备份全体完成------\n" # 开端紧缩,把紧缩放到备份停止是避免紧缩时光太长,如果涌现锁表,会影响网站运行 sqls=$(ls --almost-all --ignore-backups --indicator-style=slash -1 ${todayRoot}*/*.sql 2>&1) for path in $sqls; do #路径中包括了绝对路径,tar命令还须要改良 sqlDir=$(dirname $path) sql=$(basename $path) tarInfo=$(tar --create --remove-files --bzip2 --absolute-names --directory="${sqlDir}" --add-file="${sql}" --file="${path}.tar.bz2") if [ "$?" -ne "0" ];then appendLog "紧缩并删除${path}文件时出错:\n${tarInfo}" else appendLog "已紧缩并删除${path}" fi done appendLog "------完成紧缩操作-----" #开端清算大于x天的备份 daysDir=$(ls --almost-all --ignore-backups --indicator-style=slash -1 "${backupRoot}" 2>&1) for bkDir in $daysDir;do bkDir="${backupRoot}${bkDir}" if [ ! -d "${bkDir}" ];then appendLog "预备删除过期的备份操作时,由于${bkDir}不是一个目录,跳过" continue fi dirName=$(basename $bkDir) #test echo $dirName | grep -P "^\d{10}$" 2>&1 >/dev/null if [ "$?" -ne "0" ];then appendLog "预备删除过期备份目录时,检测到待删除目录名不是10位数字,跳过:${bkDir}" continue fi outDay=$(date --date="-${deleteRootOutDays}day" "+%Y%m%d00") #如果文件时光小于这个过期时光那末就强迫删除全部目录 if [ "${dirName}" -lt "${outDay}" ];then rmInfo=$(rm --force --preserve-root --recursive "${bkDir}" 2>&1) appendLog "发明一个过期备份目录 ${bkDir},已超过 ${deleteRootOutDays} 天,也就是小于${outDay}就会被删除 ,被强迫删除状况(0为胜利):${?} ${rmInfo};" fi done appendLog "------完成清算过期备份文件夹操作----" appendLog "空间应用情形以下:\n $(df -h)" appendLog "当前备份文件占用空间情形:\n $(du -hs ${todayRoot})" myExit 0#!/bin/bash # mysql 的备份脚本 # 备份原理: # 1 # 应用罗列出所有




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: