#!/bin/bash#by hwc#源项目主目录名(需修改)_base_srcdir=/var/www/html#项目名(需修改)_pd=wwwdata#备份目的目录(可修改)_dbbkdir=/opt$_base_srcdir/$_pd/db_webbkdir=/opt$_base_srcdir/$_pd/web_logdir=/opt$_base_srcdir/$_pd/log#日志文件格式_logfilemt=backup.`date +%Y%m%d`.txt#备份开始时间戳_sttime=`date +%s`#备份开始与结束时间_bk_stet_time=`date +%F' '%T`#备份前缀_bkprefix=`date +%Y%m%d`_$_pd#保留最新几份备份_keep_savenumber=5#可重复执行备份的周期【默认一天】_bkinterval=86400

#数据库信息(需修改)_dbhost=127.0.0.1_dbport=33106_dbuser=root_dbpasswd=123123_dbname=dbname_mysql_ckinfo="--host=$_dbhost --user=$_dbuser --password=$_dbpasswd --port=$_dbport"_mysql_lgbin=/usr/bin/mysql_mysql_dpbin=/usr/bin/mysqldump
#by hwc#检查源目录与项目if [ ! -d $_base_srcdir/$_pd ]; thenecho -e "源项目 $_base_srcdir/$_pd 不存在. 请确认源目录是否正确!"elseif ! `echo 'exit' | $_mysql_lgbin -s $_mysql_ckinfo` ; thenecho -e "数据库连接不上!请检查后重写执行!"else#检查备份目的目录if [ ! -d $_dbbkdir ]; thenecho -e "db备份目标文件夹:$_dbbkdir 不存在. 即将创建!"mkdir -p $_dbbkdirelseecho -e "db备份目标文件夹$_dbbkdir 已存在!"fiif [ ! -d $_webbkdir ]; thenecho -e "web备份目标文件夹:$_webbkdir 不存在. 即将创建!"mkdir -p $_webbkdirelseecho -e "web备份目标文件夹$_webbkdir 已存在!"fiif [ ! -d $_logdir ]; thenecho -e "logdir备份目标文件夹:$_logdir 不存在. 即将创建!"mkdir -p $_logdirelseecho -e "logdir备份目标文件夹$_logdir 已存在!"fi
#by hwc#删除指定最新的备份个数之外的备份(5个)#$_keep_savenumber#计算webbk已经存在的备份数_webbkdir_number=`find $_webbkdir -mindepth 1 -maxdepth 1 -type d | wc -l`if [ $_webbkdir_number -gt $_keep_savenumber ] ; thenfind $_webbkdir -mindepth 1 -maxdepth 1 -type d -printf "%P " | sort -nr | head -6 | tail -n1 | xargs -i rm -rf {}elseecho -e "当前 $_webbkdir 还在新周期中,备份数小于 $_keep_savenumber 个,不用执行删除操作!"fi#计算dbbk已经存在的备份数_dbbkdir_number=`find $_dbbkdir -mindepth 1 -maxdepth 1 -type f | wc -l`if [ $_dbbkdir_number -gt $_keep_savenumber ] ; thenfind $_dbbkdir -mindepth 1 -maxdepth 1 -type f -printf "%P " | sort -nr | head -6 | tail -n1 | xargs -i rm -rf {}elseecho -e "当前$_dbbkdir 还在新周期中,备份数小于 $_keep_savenumber 个,不用执行删除操作!"fi
#by hwc#执行备份#webdir#是否首次执行_webbkdir_number=`ls -ls $_webbkdir | wc -l`if [ $_webbkdir_number -le 1 ] ; then_bk_stet_time=`date +%F' '%T`echo -e "这是项目 $_webbkdir 的首次备份执行!"echo -e "开始创建新的备份.....备份新目录名:$_bkprefix ......开始时间为:$_bk_stet_time" >> $_logdir/$_logfilemtcp -r $_base_srcdir/$_pd $_webbkdir/$_bkprefixif [ $? -eq 0 ] ; thensleep 1_bk_stet_time=`date +%F' '%T`echo -e "备份已完成.....完成时间为:$_bk_stet_time " >> $_logdir/$_logfilemtfielse#最新备份目录获取_latest_webbk=`find $_webbkdir -mindepth 1 -maxdepth 1 -type d -printf "%P " | sort -nr | head -1`#最新备份时间获取_latest_webbk_crtime=`stat -c %Y $_webbkdir/$_latest_webbk`if [ `expr $_sttime - $_latest_webbk_crtime` -ge $_bkinterval ] ; then_bk_stet_time=`date +%F' '%T`echo -e "开始创建新的备份.....备份新目录名:$_bkprefix ......开始时间为:$_bk_stet_time" >> $_logdir/$_logfilemtcp -r $_base_srcdir/$_pd $_webbkdir/$_bkprefixif [ $? -eq 0 ] ; thensleep 1_bk_stet_time=`date +%F' '%T`echo -e "备份已完成.....完成时间为:$_bk_stet_time" >> $_logdir/$_logfilemtfielseecho -e "一天内只能执行一次此备份,最新备份 $_latest_webbk 在一天之内,或可删除重新执行!"fifi
#by hewc#dbdir#是否首次执行_dbbkdir_number=`ls -ls $_dbbkdir | wc -l`if [ $_dbbkdir_number -le 1 ] ; then_bk_stet_time=`date +%F' '%T`echo -e "这是项目 $_dbbkdir 的首次备份执行!"echo -e "开始创建新的备份.....备份新文件名:$_bkprefix.sql ......开始时间为:$_bk_stet_time" >> $_logdir/$_logfilemt$_mysql_dpbin -h$_dbhost -P$_dbport -u$_dbuser -p$_dbpasswd $_dbname > $_dbbkdir/$_bkprefix.sqlif [ $? -eq 0 ] ; thensleep 1_bk_stet_time=`date +%F' '%T`echo -e "备份已完成.....完成时间为:$_bk_stet_time " >> $_logdir/$_logfilemtfielse#最新备份文件获取_latest_dbbk=`find $_dbbkdir -mindepth 1 -maxdepth 1 -type f -printf "%P " | sort -nr | head -1`#最新备份时间获取_latest_dbbk_crtime=`stat -c %Y $_dbbkdir/$_latest_dbbk`if [ `expr $_sttime - $_latest_dbbk_crtime` -ge $_bkinterval ] ; then_bk_stet_time=`date +%F' '%T`echo -e "开始创建新的备份.....备份新文件名:$_bkprefix.sql ......开始时间为:$_bk_stet_time" >> $_logdir/$_logfilemt$_mysql_dpbin -h$_dbhost -P$_dbport -u$_dbuser -p$_dbpasswd $_dbname > $_dbbkdir/$_bkprefix.sqlif [ $? -eq 0 ] ; thensleep 1_bk_stet_time=`date +%F' '%T`echo -e "备份已完成.....完成时间为:$_bk_stet_time" >> $_logdir/$_logfilemtfielseecho -e "一天内只能执行一次此备份,最新备份 $_latest_dbbk 在一天之内,或可删除重新执行!"fifififi
以上是比较早期初步使用的,欢迎指正。

