linux实现对上传文件的定时备份、增量备份的方法

 更新时间:2020年04月24日 10:51:37   作者:魏元子  
这篇文章主要介绍了linux实现对上传文件的定时备份、增量备份的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

介绍

如果你们使用的是类似阿里云的OSS存储服务,那么可以使用服务提供的定时备份,这样可以不用考虑在服务器上做文件备份。

实际上想实现基础的备份还是非常简单的,我们平常使用tar、unzip等命令打包文件,在这个基础上编写一个shell脚本,利用linux的crontab功能添加一个定时执行程序,这样就可以简单实现文件备份。但是这种方式在文件量不断增大后还行吗?答案肯定是不行,当文件量不断增加,所占存储空间增大。这种简单的备份方式会让压缩时间过长,占用过多的存储空间。那么怎么解决这一问题呢?我们可以使用增量备份来避免每一次都对所有文件进行备份压缩而带来的时间和空间的问题。

下面介绍一下实现方式(linux系统环境)

在编写脚本之前需要先查看一下服务器上是否有crontab功能

注:在这里要赞一下这个crontab功能,确实十分实用

使用 rpm -qa|grep crontab命令查看是否已安装crontab

在这里插入图片描述

上图所示,表明已安装。

如果未安装,则使用yum命令进行安装

yum -y install vixie-cron
yum -y install crontabs

vixie-cron 是 cron 的主程序;
crontabs 是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

如果是内网环境,需要离线安装的可找要离线安装包

1.启动:systemctl start crond.service

在这里插入图片描述

2.查看状态:systemctl status crond.service

在这里插入图片描述

上图所示,表明crontab已经在运行

下面贴上常用命令

systemctl start crond.service	//启动命令
systemctl status crond.service	//查看状态
systemctl stop crond.service	//关闭命令
systemctl restart crond.service	//重启
systemctl enable crond.service	//开机运行

有人用的不是systemctl命令,特此贴出service常用命令

service crond start  //启动服务
service crond stop  //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态

创建脚本文件

 vim backup.sh

写入脚本命令(注:这个脚本是从网上找的,未找到原出处)

#!/bin/bash
#好的做法
#根据项目不同来重命名该脚本
#例如 amountebak.sh or pandawillsbak.sh
#该脚本最好放在 $bakpp定义的绝对路径部分
#你可以 在$bakpp下找到相应的备份文件
#例如 /usr/backup/amountebak.sh or /usr/backup/pandawillsbak.sh


########## Init Path ########
# 在下面的参数中必须定义的参数有 $bakpp、$project、$projectpp
TAR=/bin/tar
# 存放备份文件的地方,以项目名称区分
bakpp=/data/file_backup/"$project"
# 需要备份的文件夹,文件夹的路径
project=file
projectpp=/data/
# parament for varible
ym=`date +%Y%m`
ymd=`date +%Y%m%d`
# 存储备份文件的子目录,以月份区分,他的上级目录是$bakpp定义的
monthbakpp=$bakpp/$ym
gidpp=$monthbakpp
gidshot=gid$project$ym
# 完全备份的文件名
fullname=$ym
# 增量备份的文件名
incrementalname=$ymd
# Record the location of the log
log=$bakpp/$project.log

############ chk_full #######################
# 检查完全备份是否存在,如果不存在就创建它

#this function check fullbackup file exist or not , if not then create fullbackup now

chk_full()
{
if [ -e "$monthbakpp"/"$project"_"$ym"_full.tar.gz ];then
echo ""$project"_"$ym"_full.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$log
else
tar_full
fi
}
######### chk_incremental ########
# 检查增量备份是否存在
chk_incremental()
{
while [ -e "$monthbakpp"/"$project"_"$incrementalname"_incremental.tar.gz ]
do
incrementalname=`echo "$incrementalname + 0.1" | bc `
done
}
######## tar_incremental #######
# 执行增量备份
tar_incremental()
{
cd $projectpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log
sleep 3
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$incrementalname"_incremental.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log
}

######## tar_full ###########
tar_full()
{
touch $gidpp/$gidshot
cd $projectpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$fullname"_full.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log
}

########### backup ##############################
# 总体调用备份,此时会做相应的检查以确保备份前提准备充分
backup()
{
if [ -d $monthbakpp ]; then
 chk_full
 chk_incremental
 tar_incremental
else
mkdir -p $bakpp/$ym
tar_full
fi
}

########### let's begin #############
# 先检查$bakpp是否存在,如果不存在先创建后备份
if [ -d $bakpp ];then
backup
else
mkdir -p $bakpp
backup
fi
#advice you can create a file for put backup file, eg /usr/cctcc
#crontab
#mini hours day month week command
# */5 * * * * /home/mmroot/zbb/aaa.sh
# 0 1 */1 * * /home/mmroot/zbb/aaa.sh
# tar -ztf test.tar.gz 查看备份文件里面的文件

使用wq!命令保存文件

这个脚本文件有三处地方需要注意一下:

#存放备份文件的地方,以项目名称区分
bakpp=/data/file_backup/"$project"

#需要备份的文件夹,文件夹的路径
project=file
projectpp=/data/

上面的三个路径要根据自己具体情况进行更改

添加定时任务:输入命令

crontab -e

任务示例

05 03 * * * cd /data/file_backup/;sh file_backup.sh

然后使用 crontab -l 查看即可。
在备份完成后,可使用命令查看备份文件里面的文件

tar -ztf file.tar.gz //查看备份文件面文件

好了,到此定时备份、增量备份就结束了。

特此说明:更安全的方式是另找一个服务器做文件备份存储服务器。在本机完成定时备份、增量备份后,将文件推送到文件备份存储服务器。这样可以保证在磁盘损坏的情况下达到备份功能

到此这篇关于linux实现对上传文件的定时备份、增量备份的文章就介绍到这了,更多相关linux 上传文件备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ubuntu 18.04 安装MySQL时未提示输入密码的问题及解决方法

    Ubuntu 18.04 安装MySQL时未提示输入密码的问题及解决方法

    这篇文章主要介绍了Ubuntu 18.04 安装MySQL时未提示输入密码的问题及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Linux系统设置tomcat开机自启介绍

    Linux系统设置tomcat开机自启介绍

    大家好,本篇文章主要讲的是Linux系统设置tomcat开机自启介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Linux系统中检查系统重启记录方案

    Linux系统中检查系统重启记录方案

    通过Linux系统的日志文件和特定命令,系统管理员可以有效监控和分析系统的重启历史,以便及时发现并解决潜在的系统问题和安全漏洞,保证系统稳定高效运行,利用/var/log目录和命令如last、uptime和journalctl
    2024-10-10
  • Centos下安装Ansible的示例代码

    Centos下安装Ansible的示例代码

    本篇文章主要介绍了Centos下安装Ansible的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Linux中的几种最佳文件系统

    Linux中的几种最佳文件系统

    这篇文章主要介绍了Linux中的几种最佳文件系统,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Linux使用systemd服务和crontab实现Shell脚本开机自动运行过程

    Linux使用systemd服务和crontab实现Shell脚本开机自动运行过程

    在Linux系统中,使用systemd和crontab是实现Shell脚本开机自启动的两种常用方法,首先,需创建一个Shell脚本,将其放置在适当目录,通过编写.service文件并将其移动到/etc/systemd/system/目录下,可以设置为systemd服务
    2024-09-09
  • Jdk1.8的安装简易教程(Linux和windows)

    Jdk1.8的安装简易教程(Linux和windows)

    本文通过一段简易的代码给大家介绍Jdk1.8的安装(Linux和windows),非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • linux系统安装iso文件方法

    linux系统安装iso文件方法

    在本篇文章中小编给大家整理了关于linux系统下怎么安装iso文件的解决方法和步骤,有需要的朋友们学习下。
    2019-05-05
  • 在CentOS 7.2上安装SuPHP的详细方法

    在CentOS 7.2上安装SuPHP的详细方法

    这篇文章主要介绍了在CentOS 7.2上安装SuPHP的详细方法,本教程介绍从源代码安装CentOS 7.2上的SuPHP,因为没有可用于CentOS 7.2的SuPHP软件包,需要的朋友可以参考下
    2020-02-02
  • linux查找日志cat和grep方式

    linux查找日志cat和grep方式

    在Linux系统中,我们常常需要查询日志文件中的特定信息,这时候掌握一些关键字查询技巧就显得非常重要,例如,要查询关键字前后30行,可以使用grep命令的'-C'选项,若要查询两个关键字同时出现的情况,可以将grep命令连续使用,对于压缩后的文件
    2024-10-10

最新评论