SVN库迁移

来源:互联网 发布:淘宝怎么发布产品 编辑:程序博客网 时间:2024/06/16 02:06

SVN命令

lsof -i :3690 查看svn是否启动 ps aux |grep 'svn' 查找所有svn启动的进程 kill -9 pid 杀死pid这个查找到的svn进程 /usr/bin/svnserve --daemon --pid-file=/var/run/svnserve.pid -r /var/data/svn/repos --log-file /var/log/svnserve.log      指定以守护进程形式,pid,log的路径来启动svnnetstat -anp|grep svnserve    查看一下SVN信息

SVN迁移一般是备份当前库到另一服务器进行库恢复。

一般采用三种方式:

  1. svnadmin dump
  2. svnadmin hotcopy
  3. svnsync

SVN服务器几种备份策略
SVN库迁移整理方法总结

本人使用过前两种方法,对于SVN库的迁移,足矣。

svnadmin dump

  • 官方推荐的备份方式
  • 可以全量备份也可以增量备份,并提供了版本恢复机制。
  • 如果版本数过多,dump的过程将非常慢;
  • 备份耗时,恢复更耗时;不利于快速进行灾难恢复。
  • 备份时数据变大,恢复后数据可能会变小(缓存之类不备份)
  • 库下的passwdauthz不会备份,需要手动迁移
  • 恢复时库的svnserve.conf里的password-dbauthz-db会自动更改

版本数少时可以使用,版本数多非常耗时,5.2G的数据,备份时大概需二十分钟;恢复时大概需要八小时,都快哭了π_π

svnadmin hotcopy

  • 原设计目的估计不是用来备份的,只能进行全量拷贝
  • 备份过程较快,灾难恢复也很快
  • 需要硬盘空间支持,备份时数据大小跟库大小差不多
  • 恢复时库的svnserve.conf里的password-dbauthz-db不会自动更改,需要手动更改,避免认证失败

备份还原命令

先关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。

备份

  • svnadmin dump
    # 压缩备份svnadmin dump /path/to/repository | gzip > /path/to/repository-backup.gz.date# 不压缩备份svnadmin dump /path/to/repository > /path/to/repository-backup.date# 增量备份svnadmin dump /path/to/repository –r sour_version:des_version --incremental >sour-des.date
  • svnadmin hotcopy
    # 备份svnadmin hotcopy /path/to/repository  /path/to/repository-backup.date# 热备份(没试过)svnadmin hotcopy /path/to/repository  /path/to/repository-backup.date –clean-logs# 如果你传递–clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件;在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。

恢复

  • svnadmin dump
    # 建立新的svn存储库svnadmin create /path/to/new_repository# checkls -l /path/to/new_repository# 导入没压缩数据svnadmin load /path/to/new_repository < /path/to/repository-backup.date# 导入被压缩数据zcat /path/to/repository-backup.date | svnadmin load /path/to/new_repository
  • svnadmin hotcopy
    # 恢复svnadmin hotcopy /path/to/repository-backup.date /path/to/new_repository  # 直接覆盖mv /path/to/repository-backup.date /path/to/new_repository

    hotcopy恢复不需要先建立库;网上说也可以直接覆盖,本人没试过

此时再启动内网服务器svn服务,即可。如果启用了iptables,主要要放通端口3690

简单脚本

备份

#!/bin/bashSOUR_SVN="/data/svn/repos"DES_SVN="/data/svn-$(date +%F)"[ ! -d "$DES_SVN" ] && mkdir -p "$DES_SVN"for i in $(ls "$SOUR_SVN")do    # 如果是目录,则是SVN库,备份;否则是验证文件之类的,拷贝    [ ! -f $i ] && svnadmin dump "$SOUR_SVN"/$i "$DES_SVN"/$i-bak.$(date +%F) || cp "$SOUR_SVN"/$i "$DES_SVN"done#!/bin/bashSOUR_SVN="/data/svn/repos"DES_SVN="/data/svn-$(date +%F)"[ ! -d "$DES_SVN" ] && mkdir -p "$DES_SVN"for i in $(ls "$SOUR_SVN")do    # 如果是目录,则是SVN库,备份;否则是验证文件之类的,拷贝    [ ! -f $i ] && svnadmin hotcopy "$SOUR_SVN"/$i "$DES_SVN"/$i-bak.$(date +%F) || cp "$SOUR_SVN"/$i "$DES_SVN"done

内网服务器可以连外网,直接传,因数据量大,用scree (●'◡'●)ノ♥
scp root@ip:/data/svn-0317 /home

恢复

#!/bin/bashSOUR_SVN="/home/svn-0317"DES_SVN="/var/data/svn/repos"mkdir -p /var/data/svn/reposfor i in $(ls "$SOUR_SVN")do    [ ! -f $i ] && svnadmin create "$DES_SVN"/$i && svnadmin load "$SOUR_SVN"/$i "$DES_SVN"/${i%%-*} || cp "$SOUR_SVN"/$i "$DES_SVN"done#!/bin/bashSOUR_SVN="/home/svn-0317"DES_SVN="/var/data/svn/repos"mkdir -p /var/data/svn/reposfor i in $(ls "$SOUR_SVN")do    [ ! -f $i ] && svnadmin hotcopy "$SOUR_SVN"/$i "$DES_SVN"/${i%%-*} || cp "$SOUR_SVN"/$i "$DES_SVN"done

导完之后发现有个库少了30M。。。

然后使用svnadmin hotcopy又备份了一次,发现也是少30M,猜想是缓存之类的数据

svnlook youngest x# 查看库的最新版本数

比对阿里云的库版本跟内网的库版本,一致,那就不管了,代码完整就可以了ʅ(´◔౪◔)ʃ



作者:无限小BUG
链接:http://www.jianshu.com/p/295b423d50ad
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原创粉丝点击