• SVN迁移并做定时增量同步库操作


    SVN迁移并做同步库操作步骤:

    1.备份SVN,按项目仓库备份出各仓库。 参考 

    svnadmin dump E:RepositoriesSoftware >e:svnbakSoftware.dump

    2.将SVN上传到服务器。 参考 

    windows :
       pscp -P 22 D:/SVNbak/Software.dump root@IP:/svn/svnbak
    linux : 
      sshpass -p Password scp /u01/svn/bak/Software.dump root@IP:/svn/svnbak/Software.dump

      

    3.linux环境搭建SVN,安装Apache的 httpd功能模组,将SVN协议转为http供客户端访问,权限走http权限。参考《linux-svn-http.txt》

    #创建仓库 ,更改文件权限
    svnadmin create /data/svn/repository/Software
    chown -R apache.  Software 
    
    #chown -R apache. /svn/repository
    #chmod 777 -R /svn/repository/
    
    
    #启动仓库,httpd映射后不需要启动SVN仓库
    #svnserve -d -r /svn/repository
    #关闭
    #kill all svnserve
    
    #安装apache服务
    #查看httpd是否已经安装的svn模块
    ls /etc/httpd/modules/ | grep svn
    
    #安装httpd映射
    yum --disableexcludes=all install -y httpd
    #添加模块
    yum install mod_dav_svn -y
    
    
    2、安装完成,对svn版本库下的项目ProjectName进行位置映射
    在/etc/httpd/conf.d/文件下创建subversion.conf文件并编辑
    # vi subversion.conf
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module   modules/mod_authz_svn.so
    <Location /repos>
       DAV svn
       SVNParentPath /u01/svn/repository/
    
       ##<LimitExcept GET PROPFIND OPTIONS REPORT>
          AuthType Basic
          AuthName "Authorization Realm"
          AuthUserFile /u01/svn/repository/svnusers.conf # 用户文件
          AuthzSVNAccessFile /u01/svn/repository/accesspolicy.conf  #权限文件
          Require valid-user
       ##</LimitExcept>
    </Location>
    #添加用户
     
    htpasswd -mb /svn/repository/svnusers.conf username password#
     
    
    #修改端口
    cd /etc/httpd/conf/
    cp httpd.conf httpd.conf.bak
    vim httpd.conf
    Listen 80这一行,修改为 8000
    
    #添加用户组
    groupadd apache 
    useradd -g apache apache 
    
    service httpd restart
    
     
    

      

    4.重复3操作创建同步库。

    5.将各项目备份导入到对应的仓库。参考 

    svnadmin create /svn/repository/Software
    svnadmin load /svn/repository/Software< /svn/svnbak/Software.dump
    

      

    6.每天定时导出当天最新更新的代码备份,并将此备份导入到同步库。参考《增量备份-同步.txt》《Software_bak.sh》《Software_load.sh》

    增量备份-同步.txt 

    #查询两个svn仓库最新版本 
    svnlook youngest  /svn/repository/Software
    9434
    svnlook youngest  /u01/svn/repository/Software
    9482
    
    #svnadmin dump命令做版本区间 -r 9435:9482 的备份
    
    svnadmin dump /svn/repository/Software -r 9435:9482 --incremental  > /svn/svnbak/Software_20200908.dump
    
    # 将备份文件传到服务器
    sshpass -p **** scp /u01/svn/bak/Software_20200908.dump root@47.104.103.86:/svn/svnbak/Software_20200908.dump
     
    
    #导入备份到svn仓库
    svnadmin load /svn/repository/Software< /svn/svnbak/Software_20200908.dump
    
    
    
    #搭建完以后发现可以update但不能提交的一个问题:
    
    #Error: could not begin a transaction  
    
    chcon -R -t httpd_sys_rw_content_t /u01/svn/repository/Software/
    
    
    
    #添加定时任务 
    crontab -e
    
    30 23 * * * root /u01/svn/bak/Software_bak.sh
    
    30 1 * * * root /svn/svnbak/Software_load.sh > /dev/null
    

      

    Software_bak.sh

    #!/bin/bash
    #set -x
    #function:SVN增量备份
    
    #Author: heshan
    svn_repos="/u01/svn/repository/Software"  #版本库
    backup_dir="/u01/svn/bak" #nfs挂载从服务器192.168.1.x的目录
    next_backup_file="Software_backup".`date +%Y%m%d`  #增量备份文件
    log="$backup_dir/Software_backed_up.log"   #日志文件
    repo="$backup_dir/svn.txt"   #记录版本库最新版本
    sshpass -p Guideir@2020 scp root@47.104.103.86:/svn/svnbak/slave.txt $backup_dir/slave.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`" #备份起点
    echo "$first_rev 备份起点">> $log
    last_rev="`svnlook youngest $svn_repos`" #注服务器版本库最新版本
    echo "$last_rev  本机服务最新版本">> $log
    backup_repo="$backup_dir/slave.txt"
    echo "$backup_repo  目标下移个开始版本">> $log
    if [ -f $backup_repo ];then
       echo " $backup_repo 文件存在!" >> $log
    else
      echo " $backup_repo 文件不存在!" >> $log
      touch $backup_repo
      exit 0
      #echo "0">$backup_repo #第一次 从0开始
    fi
    slave_rev="`cat  $backup_repo`" #从服务器提供的校验版本
    echo "$slave_rev 从服务器提供的校验版本">> $log
    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 主从服务脚本中版本号不一致, 请检查备份开始版本号!">> $log
      exit 0
    else
         if [ "$first_rev" -le "$last_rev" ];then
          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=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"` #下一次备份起点,重点 +1版本,否则报错
    dump_rev="`/usr/bin/expr $last_rev + 1 `"
    echo "$dump_rev  "
    echo $dump_rev>$repo  #覆盖上一次备份起点
    #删除之前的增量备份文件
    rm -rf $backup_dir/Software_backup.$(date +%Y%m%d --date='1 days ago')
    sshpass -p Guideir@2020 scp $backup_dir/$next_backup_file root@47.104.103.86:/svn/svnbak/$next_backup_file
    

      

    Software_load.sh

    #!/bin/bash
    #set -x
    #function
    
    #Author  heshan
    
    svn_repos="/svn/repository/Software"
    backup_dir="/svn/svnbak"
    backup_file="Software_backup".$(date +%Y%m%d --date='1 days ago')
    log="$backup_dir/logs/last_load.log".`date +%Y%m%d`
    echo "********************"`date`"***************">> $log
    echo "SVN load start!">> $log
    first_rev="`svnlook youngest $svn_repos`"
    echo "First:$first_rev">> $log
    if [ -f $backup_dir/$backup_file ];then
       svnadmin load $svn_repos < $backup_dir/$backup_file 2>&1 >>$log #¦Ì¨¨¡À¡¤Y?t
    else
      echo " $backup_dir/$backup_file ??t2?¡ä no dump to load!" >> $log
      exit 0
    fi
    last_rev="`svnlook youngest $svn_repos`"
    echo "Last:$last_rev">> $log
    repo_slave=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`
    echo "Next:$repo_slave">> $log
    echo "$repo_slave">$backup_dir/slave.txt
    echo "********************"`date`"***************">>$log
    rm -rf "Software_backup".$(date +%Y%m%d --date='2 days ago')
    echo "SVN load Eed!">> $log
    

      

  • 相关阅读:
    iOS 针对txt文档进行解码
    iOS导入其他APP下载的文件(用其他应用打开)
    地图定位
    NSURLSession
    利用box-shadow属性实现页面层叠效果
    利用vue-router和compoment重构代码--踩坑(一)
    markdown 一分钟入门
    webpack,配置,上手,例子
    在搜索框里添加放大镜的图标,且显示提示信息
    css3实现checkbox变开关按钮
  • 原文地址:https://www.cnblogs.com/heshana/p/13786785.html
Copyright © 2020-2023  润新知