优选主流主机商
任何主机均需规范使用

详解Linux运维中CentOS系统SVN双备份高效Shell脚本实现方法

前言

SVN是Subversion的简称,是一个开放源代码的版本控制系统,采用了分支管理系统。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

作为一个代码管理工具,备份操作显得尤为重要,这里采取这样的备份策略:在执行本地备份的同时,让Shell脚本自动上传数据到另一台FTP备份服务器中,这种异地备份策略成本比较小,无需存储,而且安全系统高,想到与双备份,本地和异地同时出现数据损坏的概率是低很多的。

备份策略说明

使用CentOS 6系列系统,安装vsftpd,修改配置参数。此外vsftpd的备份目录可以做RAID1或RAID5。
执行脚本将svn项目进行本地目录备份,然后将备份文件上传到FTP服务器上,已实现双备份。

备份步骤

安装并配置vsftpd

使用yum直接安装即可。

?

1 yum -y install vsftpd

修改配置,由于要进行上传操作,所以要允许用户上传。为安全性考虑,不建议匿名用户操作。

修改配置后,将不必要的vsftpd.conf参数屏蔽,显示为:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@private ~] # grep -v "^#" /etc/vsftpd/vsftpd.conf | grep -v "^$" anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES

chroot_local_user=YES这条语句需要重点强调一下,其作用是对用户登录权限进行限制,即所有本地用户登录vsftpd时只能在自己的家目录下,这是基于安全的考虑,本实例脚本也会基于这点,要是使用本脚本在实际的生产环境,需要注意该点。

创建ftp登录用户

在备份服务器上创建备份用户,本次创建用户svn,并为其分配密码,还应该将其家目录更改为备份目录,本地备份目录为:/data/backup/svn-backup/,这样更方便备份工作,以下脚本以此类推。

?

1 2 3 4 [root@private ~] # useradd -d /data/backup/svn-backup/ svn [root@private ~] # echo "svnpasswd" | passwd --stdin svn Changing password for user svn. passwd : all authentication tokens updated successfully.

配置svn仓库

首先检查操作系统上面是否安装了subversion,一般centos操作系统都默认安装了此软件,如果没有安装使用如下命令快速安装

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 rpm -qa subversion yum -y install subversion ##创建版本库 svnadmin create /data/svn  // 这里的文件目录自己随便设置 ##配置svnserve,上述版本库`/data/svn `建立后在文件夹下会生成conf文件夹,进入`/data/svn/conf`下面会有下面3个文件   [root@private svn] # ls conf/ authz passwd svnserve.conf   ##需要修改`svnserve.conf`修改以下几个部分:   anon-access = read auth-access = write password-db = passwd authz-db = authz   ##修改`passwd`文件为:   [ users ] username = password  // 这里的username和password自己设置   ##配置文件`authz`最后加上以下两行(这两行解决了 SVN客户端解决authorization failed问题)   [/] * = rw    ##启动svnserve即可: svnserve -d -r /home/myrepos/

备份脚本

本脚本设置轮询周期为30天一次,Shell会自动删除30天以前的文件。在vsftpd建立相应的备份用户svn脚本内容如下:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #!/bin/bash SVNDIR= "/data" SVNADMIN= "/usr/bin/svnadmin" DATE=$( date +%Y-%m-%d) OLDDATE=$( date +%Y-%m-%d -d '30 days' ) BACKDIR= "/data/backup/svn-backup" [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR} LogFile=${BACKDIR} /svnbak .log [ -f ${LogFile} ] || touch ${LogFile} mkdir ${BACKDIR}/${DATE}   for PROJECT in svn do    cd $SVNDIR    $SVNADMIN hotcopy $PROJECT $BACKDIR/$DATE/$PROJECT --clean-logs    cd $BACKDIR/$DATE    tar zcvf ${PROJECT}_svn_${DATE}. tar .gz $PROJECT > /dev/null    rm -rf $PROJECT    sleep 2 done   HOST=localhost FTP_USERNAME=svn FTP_PASSWORD=Haiyuan cd ${BACKDIR}/${DATE}   ftp -i -n - v <<! open ${HOST} user ${FTP_USERNAME} ${FTP_PASSWORD} bin cd ${OLDDATE} mdelete * cd .. rmdir ${OLDDATE} mkdir ${DATE} cd ${DATE} mput * bye

 

未经允许不得转载:搬瓦工中文网 » 详解Linux运维中CentOS系统SVN双备份高效Shell脚本实现方法