VisualSVN服务器迁移

前言

同事安排我将旧svn服务器的内容迁移到新svn服务器。
他只要求有最后一版就行,我想将旧svn提交的历史记录也迁移过来。
查了,用svn命令行导入导出挺方便的,整个脚本让svn自己干活就行。

实验

导出旧svn服务器内容到dump文件

将 VisualSVN安装后的bin目录加入PATH
运行下列脚本,从svn导出dump文件

@echo off

svnadmin dump "D:\Repositories\prj1" > D:\svn_bk_by_ls\oldsvn_prj1.dump
svnadmin dump "D:\Repositories\prj2" > D:\svn_bk_by_ls\oldsvn_prj2.dump
rem ...
rem svnadmin dump "D:\Repositories\prjN" > D:\svn_bk_by_ls\oldsvn_prjN.dump

echo "svn backup end ..."
pause

导入dump文件到新svn服务器

在新旧svn服务器上都装上飞鸽传书
将dump文件用飞鸽传书从旧svn服务器传到新svn服务器

飞鸽传书(5.0.12.31,5.0.12.31)在win10下有bug, 装了飞鸽后,在桌面或文件夹下,不选择任何目标,右击时,windows桌面重启。
在win10下,用完飞鸽就得卸了,挺尴尬的。

如果旧服务器自动关机了,文件没传完。不能用飞秋断点续传的功能,要重新传输曾经被中断的文件。
否则文件内容不正确。这是飞鸽的bug了。
一个库40G的dump文件,内容传的不正确,用svn导入了半天不对。挺背的。
重新用飞秋传了一次,导入库最后也失败了。显示 svnadmin: E200003: Premature end of content data in dumpstream
导入时间太长了,没有时间再找个工具重新传送到新服务器,再导入一遍了。导入用了4个小时。
虽然最后一个大库导入失败,但是用svn日志看,还是正常的。只是倒入了一部分而已。

终于明白为啥那个大库导入失败了。
因为导出就失败了,开始没注意看。
旧sn服务器是winserver2003_win32, 已经配了VisualSVN-Server-2.7.14, 这是最后一个支持winserver2003的版本。
用命令导出库的dump文件,一定是失败的。应该是和操作系统(winserver2003_x86)有关系, 可能OS就不支持建立那么大(60GB)的文件. 和飞秋和VisualSVN-Server没关系。

那只能将库直接拷贝(分卷压缩)到新服务器,然后直接导入库看看。

那个库干活很多,还是再确认一下,哪出了问题。

库大小40.3 GB (43,298,436,135 字节),找个md5工具。看到从旧服务器导出的dump文件的md5和传输到新服务器的dump文件的md5不同。这下放心了,这只是飞鸽的bug, 可能传送大文件有bug而已。
// 我不确定,因为发现找的md5工具(WinMD5 1.2, 超大文件时,计算过程有误,估计是文件读写失败情况处理不当或文件size那不是64位的长度)有bug, 另外又找了一个md5(Hash_V1.04 对超大文件支持的好)的工具,重新算过,md5相同(但是这个md5是分卷压缩700MB后,传过来的)。

// 现在尝试用md5分卷压缩后的dump文件进行导入。
// 另外又从旧svn中再dump一份库出来,再算一下md5, 看看是否和上次导出的dump文件的md5相同。
出bug时,各种验证…

现在可以将这个大库分卷压缩成小文件(<= 2GB)或用共享文件夹的方式拷贝到新服务器。

将 VisualSVN安装后的bin目录加入PATH
用VisualSVN Server Manager在新服务器上手工建立要导入的空库(e.g. prj1 prj2 … prjN), 如果不建立空库,导入dump会失败
运行下列脚本,将dump文件导入svn

@echo off

svnadmin load E:\Repositories\oldsvn_prj1 < D:\FeigeDownload\oldsvn_prj1.dump
svnadmin load E:\Repositories\oldsvn_prj2 < D:\FeigeDownload\oldsvn_prj2.dump
rem ...
svnadmin load E:\Repositories\oldsvn_prjN < D:\FeigeDownload\oldsvn_prjN.dump

echo "svn restore end ..."
pause

备注

看着导入的过程挺正常的,不过svn很大,等着导入完成。再用VisualSVN Server Manager看看是否导入成功。
在客户端用TortoiseSVN看历史记录,能看到11年时的提交,说明导入成功。

发布了436 篇原创文章 · 获赞 126 · 访问量 175万+

猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/96174316
今日推荐