Linux SVN服务器做定时备份脚本:
SVN 主服务器:
新建一个目录 :/root/svn/
下面增加一个脚本:add_backed.sh
脚本内容:
#!/bin/bash
#set -x
#function:SVN增量备份
#Author: wangmuming
svn_repos="/data/svndata/companyname" #版本库
backup_dir="/usr/svn/backup" #nfs挂载从服务器192.168.1.x的目录
next_backup_file="add_incremental_backup".`date +%Y%m%d` #增量备份文件
log="$backup_dir/last_add_backed_up.log" #日志文件
repo="$backup_dir/svn.txt" #记录版本库最新版本
echo "********************"`date`"***************">> $log
if [ -f $repo ];then
echo " $repo 文件存在!" >> $log
else
echo " $repo 文件不存在!" >> $log
touch $repo
echo "0">$repo #从0开始备份
fi
echo "SVN ADD DUMP start!">> $log
first_rev="`cat $repo`" #备份起点
last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #注服务器版本库最新版本
backup_repo="$backup_dir/slave.txt"
if [ -f $backup_repo ];then
echo " $backup_repo 文件存在!" >> $log
else
echo " $backup_repo 文件不存在!" >> $log
touch $backup_repo
echo "0">$backup_repo #第一次 从0开始
fi
slave_rev=`cat $backup_repo` #从服务器提供的校验版本
if [ $first_rev -ne $slave_rev ];then
#echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev" #主服务器备份起点版本和从数据最后版本不一致,则邮件报警
echo "SVN Slaves is error, please check. "
else
if [ $first_rev -le $last_rev ];then
/usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file #上一次记录的版本,到最新版本的增量备份
else
echo " no update record!" >> $log
rm -rf $backup_dir/access.conf
rm -rf $backup_dir/auth.conf
cp $svn_repos/access.conf $backup_dir/
cp $svn_repos/auth.conf $backup_dir/
exit 0
fi
fi
echo "Fist:$first_rev">> $log
echo "Last:$last_rev">> $log #写入日志文件
#dump_rev="`/usr/bin/expr $last_rev+1`" #下一次备份起点,重点 +1版本,否则报错
dump_rev=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`
echo $dump_rev>$repo #覆盖上一次备份起点
#删除之前的增量备份文件
rm -rf $backup_dir/add_incremental_backup.$(date +%Y%m%d --date='1 days ago')
rm -rf $backup_dir/access.conf
rm -rf $backup_dir/auth.conf
cp $svn_repos/access.conf $backup_dir/
cp $svn_repos/auth.conf $backup_dir/
增加定时任务:crontab –e
//每天的1点十分执行一次 这个看公司需求 具体的可以设置为多少分钟一次都是可以的
SVN从服务器:
新建一个目录 :/root/svn/
下面增加一个脚本:load_backed.sh
脚本内容:
#!/bin/bash
#set -x
#function:SVN增量导入
#Author: wangmuming
svn_repos="/data/svndata/companyname" #从服务器192.168.1.*版本库目录
backup_dir="/usr/svn/backup" #nfs共享主服务器目录
backup_file="add_incremental_backup".`date +%Y%m%d` #增量备份文件
log="$backup_dir/last_load.log" #日志文件
echo "********************"`date`"***************">> $log
echo "SVN load start!">> $log
first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
echo "First:$first_rev">> $log
if [ -f $backup_dir/$backup_file ];then
/usr/local/subversion/bin/svnadmin load $svn_repos < $backup_dir/$backup_file 2>&1 >>$log #导入增量备份文件
else
echo " $backup_dir/$backup_file 文件不存在! no dump to load!" >> $log
exit 0
fi
last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
echo "Last:$last_rev">> $log #记录最新版本号
#repo_slave=$last_rev+1 #作为检测主服务器和从服务器数据是否同步的判断数据
repo_slave=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`
echo "$repo_slave">$backup_dir/slave.txt
echo "********************"`date`"***************">>$log
#删除增量备份文件
rm -rf $backup_dir/add_incremental_backup.*
echo "SVN load Eed!">> $log
增加定时任务:crontab –e
30 4 * * * /bin/sh /root/svn/load_backed.sh //将主服务器上的导出内容导入到备份的SVN服务器上
注意:这个导入的时间点要晚与导出的时间段;
在备份的SVN服务器上设置一个文件共享服务:
# cat /etc/exports
/usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)
# cat /etc/exports
/usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)
启动文件共享服务:
service nfs start
SVN主服务器:
mount IP:/usr/svn/backup /usr/svn/backup
/usr/svn/backup 目录内容:
-rw-r--r-- 1 root root 17058 7月 8 01:14 last_add_backed_up.log
-rw-r--r-- 1 root root 6704579 7月 8 04:30 last_load.log
-rw-r--r-- 1 root root 5 7月 8 04:30 slave.txt
-rw-r--r-- 1 root root 5 7月 8 01:14 svn.txt
到此,基于Linux SVN的服务器之间的备份完成。