http://spiritfrog.iteye.com/blog/448578
http://blog.sina.com.cn/s/blog_5eb1a2670100l24i.html
主要参考渣浪博客的文档,不过那个svn仓库重组新结构,反应测试几次才了解.
如果正好您也在切割SVN库,最好看新浪文档,那里很详细,此处主要是我们实际
生产切割报告.
SVN备份策略
SVN库已经切换过来,可是一直没有进行数据备份,真的很佩服自己,不怕死.
SVN备份三种方式
svnadmin dump
svnadmin hotcopy
SVN数据备份方式选择
svn备份不宜采用普通的文件复制备份方式,因为程序运行会导致数据读取不一致的
情况,与MYSQL类似吧。根据资料显示,大师使用rsync命令来进行增量和全量备份时,
结果在后期的复查过程中,发现备份的数据不可用,因此最好使用SVN自带的备份工具。
svnadmin hotcopy
相当于物理意义上复制出一份数据,可是很消耗磁盘资源,而且没有试过如何实现跨机
远程备份。
svnadmin dump/svnadmin load
官方推荐使用备份方式,灵活且支持全量和增量备份,支持版本恢复机制.
如果数据量过多,版本历史数目庞大,会导致备份数据占用过多空间.不过在之前项目
应用使用有过实际生产经验,因此会使用此种方式.
SVN全库备份
svnadmin dump /data/web/svndata/code > svnadmin_code_alldata
命令 dump关键字 SVN源库路径 导出数据
svnadmin create /mnt/newdir
命令 create创建新搬迁目录
svnadmin load /mnt/newdir < svnadmin_code_alldata
命令 load导入数据 目的目录 导入数据
SVN增量备份和还原
svnlook youngest /data/web/svndata/code 当前SVN版本库最新版本
svnadmin dump /data/web/svndata/code -r NO. > svnadmin_code_alldata.NO.
只备份对应版本的SVN数据,丢失重要的历史数据
svnadmin dump /data/web/svndata/code -r 1:100 > svnadmin_code_alldata.1to100
svnadmin dump /data/web/svndata/code -r 101:200 --incremental > svnadmin_code_alldata.101to200
数据还原
svnadmin create /mnt/newdir
svnadmin load /mnt/newdir < svnadmin_code_alldata.1to100
svnadmin load /mnt/newdir < svnadmin_code_alldata.101to200
假如将父级SVN库数据抽取data目录的数据,生成新的data仓库.
排除其它不相关空版本,并重新排列.此图列出没有处理前的情况.
svndumpfilter include data 从父库挑选出关于data内容
svndumpfilter exclude data other 将data other内容排除外,再创建新库
--drop-empty-revs 选出关于data目录生成的新库,剔除与data库不相关的版本数据
--renumber-revs 生成新库重新生成版本号
以下为实际生产环境使用语句
svndumpfilter include data < backupzz.alldata > backupzz.data.version.alldata --drop-empty-revs --renumber-revs
SVN顶级库目录去除操作,将data目录移到最顶级
之前data在父级位于/data目录,现在需要将数据移置/路径下
这些路径处理必须正确,否则在导入回来时会报错退出.
DATA库父目录处理,直接对dump出文件进行内容修改操作,将下面新建目录删除,
即让新库位于根目录下
Node-path: data
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10
PROPS-END
另外顶层目录也有些目录没有生成,也需要添加上面的一些设置
另外还要将以下内容进行替换,反正做数据也挺麻烦的
%s#Node-copyfrom-path: data/#Node-copyfrom-path: #
%s#Node-path: data/#Node-path: #
其它剩余的那个追加执行%s#Node-path: data/#Node-path: # 即可