欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个简单的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