逼格提升:自动备份VPS的文件和目录

时间:15-06-25 栏目:域名空间服务器 作者:kyle 评论:1 点击: 2,135 次

管理的服务器和VPS越来越多,备份数据成了一个每月定时的任务。于是写了一个备份脚本。

使用Linux Shell脚本来备份数据。主要代码都是拼凑出来了。由于对Shell编程不是很熟,测试了非常久的时间才完善功能。

效果如下:

1、备份指定目录的文件到指定的地方

2、可以过滤文件或者目录(网上的备份脚本大多数没有这个功能。只能备份整个目录的文件而不能过滤目录里面的内容。)

 

先分享一下,我的服务器管理的一点小经验。

在系统盘之后,都会加购一个20G左右的硬盘,这个硬盘存放所有的程序和日志。我一般命名为/data盘

/data/下面放所有的网站

/data/logs放所有的网站产生的日志和mysql和nginx等服务器产生的日志

/data/tasks放所有的定时任务

/data/backup放所有的备份。

 

如果我备份/data的话会把logs,tasks,backup再备一次。所以脚本要实现的首要的需要是备份之余要把这些目录去除出来。

 

效果大概是这样的:

1

测试情况下,我把phpinfo.php和logs,tasks,log目录都过滤了不备份。

 

Shell代码如下:存为backup_file.sh然后到Linux下执行即可,执行之间需要给执行权限chmod +x backup_file.sh

#!/bin/bash
#
# 备份目录下面所有文件
# 

#备份目录  
back_dir="/www/web/backup" #备份文件存放目录
data_dir="/www/web/default" #要备份的目录
exclude_dir=("backup" "tasks" "logs" "log" "default" "phpinfo.php") #过滤的目录,这些目录不会备份

#备份目录不存在则删除
if [ ! -d $back_dir ]; then
    mkdir -p $back_dir
fi

#当前日期
date=$(date +%Y_%m_%d)

cd $data_dir #进入备份目录

echo "#############################################################"
echo "# 备份目录下面的所有文件,可排除指定目录或者文件"
echo "# By 小五 2015.6.25版"
echo "#############################################################"
echo ""

#获取文件或者目录的绝对路径,成功返回1,失败返回0
Real_Path='' #全局变量存放绝对路径地址
function get_abs_filename() {
    # $1 : relative filename
    if [ -d "$(dirname "$1")" ]; then
        Real_Path="$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
        return 1
    else
        Real_Path=''
        return 0
    fi
}

#检查目录是否存在,存在返回1,否则返回0或者2
function dir_exists(){
    [[ -n "$1" ]] || {
        echo "usage: dir_exists <value>"
        echo "Returns 1 if dir exists, 1 otherwise"
        return 2
    }

    get_abs_filename $1 # double quotes for paths that contain spaces etc...

    #判断目录是否存在
    if [[ -d "$Real_Path" || -f "$Real_Path" ]]; then
        # echo "dir $Real_Path exists"
        return 1
    else
        # echo "dir $Real_Path did not exists"
        return 0
    fi
}

#遍历目录,输出不存在的目录
Backup_DIR=''

for item in "${exclude_dir[@]}"
do
    dir_exists $item
    num=$?
    if [ $num -eq 1  ]; then
        Backup_DIR+="--exclude=$item "
        echo "Exclude Dir $item"
    fi
done

#zip打包密码可以修改tar设置加上这个功能
zippasswd=""
zipname="backup_file_"$date".tar.gz"

##进入备份存储目录
tar -zcf $zipname * $Backup_DIR
mv $zipname $back_dir

echo 'All backp & zip done!'

 

MySQL也写了一个脚本抽空再放出来。然后写个定时业务每周备份一次。再到另一台国内的VPS上,定时取回来存放,就可以实现常规备份脱离人工了。。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: 逼格提升:自动备份VPS的文件和目录,3Q

逼格提升:自动备份VPS的文件和目录:目前有1 条留言,牛逼吧!

  1. 沙发
    小玉米:

    完全看不懂。。。。。蛮叫有机会让技术同事教我下代码。。。

    2015-06-25 5:12 pm [回复]

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人