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的路径来启动svn netstat -anp|grep svnserve 查看一下SVN信息
SVN迁移一般是备份当前库到另一服务器进行库恢复。
一般采用三种方式:
- svnadmin dump
- svnadmin hotcopy
- svnsync
本人使用过前两种方法,对于SVN库的迁移,足矣。
svnadmin dump
- 官方推荐的备份方式
- 可以全量备份也可以增量备份,并提供了版本恢复机制。
- 如果版本数过多,dump的过程将非常慢;
- 备份耗时,恢复更耗时;不利于快速进行灾难恢复。
- 备份时数据变大,恢复后数据可能会变小(缓存之类不备份)
- 库下的
passwd
和authz
不会备份,需要手动迁移- 恢复时库的
svnserve.conf
里的password-db
和authz-db
会自动更改版本数少时可以使用,版本数多非常耗时,5.2G的数据,备份时大概需二十分钟;恢复时大概需要八小时,都快哭了π_π
svnadmin hotcopy
- 原设计目的估计不是用来备份的,只能进行全量拷贝
- 备份过程较快,灾难恢复也很快
- 需要硬盘空间支持,备份时数据大小跟库大小差不多
- 恢复时库的
svnserve.conf
里的password-db
和authz-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 # check ls -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/bash SOUR_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/bash SOUR_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/bash SOUR_SVN="/home/svn-0317" DES_SVN="/var/data/svn/repos" mkdir -p /var/data/svn/repos for 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/bash SOUR_SVN="/home/svn-0317" DES_SVN="/var/data/svn/repos" mkdir -p /var/data/svn/repos for 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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SVN库迁移
最新推荐文章于 2024-03-08 18:02:32 发布