linux svn 增量备份脚本,svn全量和增量备份详解(示例代码)

1.svn的安装:

yum安装:

yum install -y subversion

mkdir /data/svn

svnadmin create project-1

svnadmin create project-2

用统一配置方法:

cp authz passwd  /data/svn

cp svnserve.conf /data/svn

vim svnserve.conf

修改:

anon-access = read  #匿名用户可读

auth-access = write   #授权用户可写

password-db = /data/svn/passwd  #使用哪个文件作为账号文件

authz-db = /data/svn/authz  #使用哪个文件作为权限文件

realm = My First Repository  # 认证空间名,版本库所在目录

vim authz

修改:

[groups]

group_admin = admin

[/]

@group_admin = rw

[project-1:/]

yan = rw

[project-2:/]

peng = rw

vim passwd

[users]

peng = 123456

yan = 123456

admin = 123456

启动:

svnserve -d -r /data/svn --config-file=/root/svnserve.conf

svn备份方式对比分析

一般采用三种方式:1、svnadmin dump

2、svnadmin hotcopy

3、svnsync注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy、rsync命令。曾经用rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。优缺点分析:第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。个人建议在版本数比较小的情况下使用这种备份方式。第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。优点是:当制作成2个镜像库的时候起到双机实时备份的作用;缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。

全量备份脚本:

[[email protected] ~]# vim svn-backup-full.sh

#!/bin/bash

#Date: 2017-08-18

#Author: brook

#Mail: @qq.com

#Function: svn的全量备份

. /etc/init.d/functions

#配置库目录

SVN_REPOROOT=/data/svn

#全量备份文件存放路径

date=$(date '+%Y-%m-%d')

RAR_STORE=/svn_backup/full/$date

if [ ! -d "$RAR_STORE" ];then

mkdir -p $RAR_STORE

fi

#日志存放目录

LOG_PATH=/svn_backup/log

if [ ! -d "$LOG_PATH" ];then

mkdir -p $LOG_PATH

fi

#项目库列表

cd $SVN_REPOROOT

TOTLE=`ls | wc -l`

for name in $(ls)

do

if [ -d "$name" ];then

echo "开始备份项目库$name"

mkdir -p $LOG_PATH/$name

echo `/usr/bin/svnlook youngest $SVN_REPOROOT/$name` > ${LOG_PATH}/${name}/last_revision

.txt

/usr/bin/svnadmin hotcopya $SVN_REPOROOT/$name $RAR_STORE/${name}

if [ $? -eq 0 ]

then

action "项目库$name备份成功" /bin/true

#echo "项目库$name全备成功" | mail -s "svn全备" [email protected]

else

action "项目库$name备份失败" /bin/false

echo "项目库$name全备失败" | mail -s "svn全备" [email protected]

fi

else

echo "开始备份配置文件$name"

cp $name $RAR_STORE/$name

fi

done

增量备份脚本:

[[email protected] ~]# vim svn-backup-increment.sh

#!/bin/bash

#Date: 2018-5-17

#Author: brook

#Function: svn的增量备份

#配置库目录

SVN_REPOROOT=/data/svn

#全量备份文件存放路径

date=$(date '+%Y-%m-%d')

RAR_STORE=/svn_backup/increment/$date

if [ ! -d "$RAR_STORE" ];then

mkdir -p $RAR_STORE

fi

#日志存放目录

LOG_PATH=/svn_backup/log

if [ ! -d "$LOG_PATH" ];then

mkdir -p $LOG_PATH

fi

#读取项目库列表

cd $SVN_REPOROOT

for name in $(ls)

do

if [ -d "$name" ];then

if [ ! -d "$RAR_STORE/$name" ];then

mkdir $RAR_STORE/$name

fi

if [ ! -d "$LOG_PATH/$name" ];then

mkdir $LOG_PATH/$name

fi

echo ******Starting backup from $date****** >> $LOG_PATH/$name/$name.log

echo ******svn repository $name startting to backup****** >> $LOG_PATH/$name/$name.log

/usr/bin/svnlook youngest $SVN_REPOROOT/$name > $LOG_PATH/A.TMP

UPPER=`head -1 $LOG_PATH/A.TMP`

if [ -f "$LOG_PATH/$name/last_revision.txt" ];then

NUM_LOWER=`head -1 $LOG_PATH/$name/last_revision.txt`

if [ $UPPER -eq $NUM_LOWER ];then

echo "unchanged" >> $LOG_PATH/$name/$name.log

rm -f $LOG_PATH/A.TMP

break

else

let LOWER="$NUM_LOWER+1"

/usr/bin/svnadmin dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR

_STORE/$name/$LOWER-$UPPER.dump

if [ $? -ne 0 ];then

echo "项目库$name增备失败" | mail -s "svn增备" [email protected]

fi

rm -f $LOG_PATH/A.TMP

echo $UPPER > $LOG_PATH/$name/last_revision.txt

echo ******This time we bakcup from $LOWER to $UPPER****** >> $LOG_PATH/$name/$n

ame.log

echo ******Back up ended****** >> $LOG_PATH/$name/$name.log

fi

#else

#            echo "0" > $LOG_PATH/$name/last_revision.txt

#            LOWER=`head -1 $LOG_PATH/$name/last_revision.txt`

#            /usr/bin/svnadmin dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_ST

ORE/$name/$LOWER-$UPPER.dump

#            rm -f $LOG_PATH/A.TMP

#            echo $UPPER > $LOG_PATH/$name/last_revision.txt

#            echo ******This time we bakcup from $LOWER to $UPPER****** >> $LOG_PATH/$name/$name

.log

#            echo ******Back up ended****** >> $LOG_PATH/$name/$name.log

fi

else

continue

fi

done

mail命令安装:

yum install -y mailx

vim /etc/mail.rc

文件尾增加以下内容

set from=xxxxx@qq.com

smtp="smtp.qq.com"

set smtp-auth-user="xxxxx@qq.com"

smtp-auth-password="123456"

set smtp-auth=login

说明:

from: 对方收到邮件时显示的发件人

smtp: 指定第三方发送邮件的smtp服务器地址

smtp-auth: SMTP的认证方式。默认是LOGIN,也可改为CRAM-MD5或PLAIN方式

smtp-auth-user: 第三方发邮件的用户名

smtp-auth-password: 用户名对应密码

nfs安装:

/etc/init.d/rpcbind start

/etc/init.d/rpcbind status

chkconfig rpcbind on

chkconfig --list rpcbind

showmount -e 10.0.0.36

mount -t nfs 10.0.0.36:/svn/backup /svn_backup

echo "mount -t nfs 10.0.0.36:/svn/backup /svn_backup" >> /etc/rc.local

svn备份服务器配置:

nfs安装:

yum install nfs-utils rpcbind -y

查看:

rpm -qa nfs-utils rpcbind

开启rpc:

/etc/init.d/rpcbind start

netstat -lntup | grep rpc

rpcinfo -p localhost

开启nfs:

/etc/init.d/nfs start

rpcinfo -p localhost

开机自启动:

chkconfig nfs on

chkconfig rpcbind on

创建共享目录:

mkdir -p /svn/backup

chown -R nfsnobody.nfsnobody /svn/backup/

vim /etc/exports

#

/svn/backup 10.0.0.0/24(rw,sync)

/etc/init.d/nfs reload

svn恢复:

svnadmin hotcopy project-1 /svndata/project-1

svnadmin load project-1 < /svn/backup/increment/2018-05-23/project-1/3-3.dump

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值