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)
/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的服务器之间的备份完成。