一个简单的shell文件备份脚本
程序员文章站
2022-06-29 12:58:16
...
这篇文章主要是说一下文件备份的脚本的编写心得
这一次工作中,因为管理员的操作失误导致系统文件受损,但是当时服务器上也没有进行一些备份的处理。那么问题来了,如果后期再遇到这种问题怎么办?这时候我们一起讨论要不写一个简单的备份脚本吧!这个脚本要实现几个功能:文件备份、数据库备份、分表备份、打包压缩、定时删除过期备份。
好了我们可以认为以上就是我们脚本的需求。那么接下来我们就开始来分析流程步骤
1.设置一些变量,方便后面使用
#备份存放路径
COPY_DIR="/www"
#要备份网站地址
WWW="/home/wwwroot/xxx"
#备份保留时间,单位:秒
DAY=86400
#当前时间,用于备份文件名字
DATE=$(date +%Y_%m_%d)
#数据库配置信息
HOSTNAME="127.0.0.1"
USERNAME="root"
PASSWORD="root"
DBNAME="xxx"
#配置要导出的表 * 全部,否则表名之间 空格 隔开
TABLENAME="*"
#TABLENAME="xx_user"
2.我们检测一下要备份的文件夹是否存在,如果不存在那么就创建一个
#检测文件夹是否存在
if [ ! -d "$COPY_DIR" ];then
mkdir "$COPY_DIR"
fi
3.我们开始打包-压缩我们要备份的文件(网站源码)
#打包网站源码
zip -r ${COPY_DIR}"/"${DATE}".zip" "$WWW"
4.导出sql文件,可以导出整个数据库,也可以导出单个数据表
#导出sql文件
if [ "$TABLENAME" == "*" ];then
mysqldump -u$USERNAME -p$PASSWORD -h$HOSTNAME $DBNAME > ${COPY_DIR}"/"${DATE}".sql"
else
mysqldump -u$USERNAME -p$PASSWORD -h$HOSTNAME $DBNAME $TABLENAME > ${COPY_DIR}"/"${DATE}".sql"
fi
5.合并打包-压缩文件以及数据库到一个zip中
suiNumber=`date +%s%N`
#合并打包+按照时间生成文件
zip -r ${COPY_DIR}"/www_"${DATE}"_"$suiNumber".zip" ${COPY_DIR}"/"${DATE}".zip" ${COPY_DIR}"/"${DATE}".sql"
6.压缩成功后删除备份+数据库的备份文件
#压缩成功删除源文件
#随机数
rm -rf ${COPY_DIR}"/"${DATE}".zip" ${COPY_DIR}"/"${DATE}".sql"
7.以上我们已经打包好了,那么下面我们就要调用一个函数,根据时间的推移删除已经失效的备份文件
#备份文件循环删除函数()
delFile(){
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
cd ${COPY_DIR}
#当前时间
date_1="`date +'%Y-%m-%d %H:%M:%S'`"
dtime="`date -d "$date_1" +%s`"
#文件创建时间(最后修改时间)
ymd="`ls --full-time $file | cut -d ' ' -f 6`"
his="`ls --full-time $file | cut -d ' ' -f 7`"
time="`date -d "$ymd $his" +%s`"
#计算后的时间
newtime=`expr $time + $DAY`
if [ $newtime -lt $dtime ];then
#删除旧数据
rm -f $file
fi
done
}
#调用备份删除函数删除旧备份
delFile $COPY_DIR
8.输出一些用户提示消息
echo "备份完成"
echo "文件路径:$COPY_DIR"
echo "文件名:"${COPY_DIR}"/www_"${DATE}"_"$suiNumber".zip"
echo "Monte©️[email protected]"
好了到这里我们这个shell就写完了,写的不是太深,不过解决了我们的一些文件以及数据表的备份问题。代码已经放到gitee,地址:https://gitee.com/perma/shell/blob/master/packcopy.sh
转载于:https://my.oschina.net/mateng/blog/3023328
上一篇: 简单的备份文件脚本
下一篇: 创建自定义 shell 函数库