自动化备份项目代码和mysql数据库脚本

 
#!/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 ]; then
 echo -e "源项目 $_base_srcdir/$_pd 不存在. 请确认源目录是否正确!"
else
 if ! `echo 'exit' | $_mysql_lgbin -s $_mysql_ckinfo` ; then
 echo -e "数据库连接不上!请检查后重写执行!"
 else
#检查备份目的目录
 if [ ! -d $_dbbkdir ]; then
 echo -e "db备份目标文件夹:$_dbbkdir 不存在. 即将创建!"
mkdir -p $_dbbkdir
 else
echo -e "db备份目标文件夹$_dbbkdir 已存在!"
 fi
 if [ ! -d $_webbkdir ]; then
 echo -e "web备份目标文件夹:$_webbkdir 不存在. 即将创建!"
mkdir -p $_webbkdir
 else
echo -e "web备份目标文件夹$_webbkdir 已存在!"
 fi
 if [ ! -d $_logdir ]; then
 echo -e "logdir备份目标文件夹:$_logdir 不存在. 即将创建!"
mkdir -p $_logdir
 else
echo -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 ] ; then
find $_webbkdir -mindepth 1 -maxdepth 1 -type d -printf "%P " | sort -nr | head -6 | tail -n1 | xargs -i rm -rf {}
else
echo -e "当前 $_webbkdir 还在新周期中,备份数小于 $_keep_savenumber 个,不用执行删除操作!"
fi
#计算dbbk已经存在的备份数
_dbbkdir_number=`find $_dbbkdir -mindepth 1 -maxdepth 1 -type f | wc -l`
if [ $_dbbkdir_number -gt $_keep_savenumber ] ; then
find $_dbbkdir -mindepth 1 -maxdepth 1 -type f -printf "%P " | sort -nr | head -6 | tail -n1 | xargs -i rm -rf {}
else
echo -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/$_logfilemt
cp -r $_base_srcdir/$_pd $_webbkdir/$_bkprefix
if [ $? -eq 0 ] ; then
sleep 1
_bk_stet_time=`date +%F' '%T`
echo -e "备份已完成.....完成时间为:$_bk_stet_time " >> $_logdir/$_logfilemt
fi
else
#最新备份目录获取
_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/$_logfilemt
cp -r $_base_srcdir/$_pd $_webbkdir/$_bkprefix
if [ $? -eq 0 ] ; then
sleep 1
_bk_stet_time=`date +%F' '%T`
echo -e "备份已完成.....完成时间为:$_bk_stet_time" >> $_logdir/$_logfilemt
fi
else
 echo -e "一天内只能执行一次此备份,最新备份 $_latest_webbk 在一天之内,或可删除重新执行!"
fi
fi

#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.sql
if [ $? -eq 0 ] ; then
sleep 1
_bk_stet_time=`date +%F' '%T`
echo -e "备份已完成.....完成时间为:$_bk_stet_time " >> $_logdir/$_logfilemt
fi
else
#最新备份文件获取
_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.sql
if [ $? -eq 0 ] ; then
sleep 1
_bk_stet_time=`date +%F' '%T`
echo -e "备份已完成.....完成时间为:$_bk_stet_time" >> $_logdir/$_logfilemt
fi
else
 echo -e "一天内只能执行一次此备份,最新备份 $_latest_dbbk 在一天之内,或可删除重新执行!"
fi
fi
 fi
fi

以上是比较早期初步使用的,欢迎指正。







本文标签: 自动化 备份 项目代码 mysql数据库

内容版权声明:【蓝色网居】部分资源来源于网络,如有侵犯您的所有权,请随时告知我们,我们将立即删除!感谢配合!

转载请注明出处:https://blog.ff56.cn/zidonghua/1657877373.html


【手机扫一扫查看文本】

手机扫一扫 手机扫一扫查看文本 手机扫一扫





mysql数据库 自动化 mysql周期全备 项目代码