我有一个巨大的Subversion版本库,并希望创build一个用于实时备份目的的从属资料库。
不过,我不想重播修改历史到奴隶,因为这将需要几天,由于我的存储库的大小。 我已经有了通常的基础设施,例如钩子脚本和两台服务于主服务器的主服务器,并且很快成为从服务器库。
我该怎么做呢?
Subversion有能力支持一个或多个可以使用钩子脚本来同步的slave存储库,或者你可以使用一个为你运行svnsync的cron作业。 当你创build一个从属仓库的时候,这个过程涉及到创build一个只有版本0的仓库,然后你重放所有从主仓库到这个从仓库的提交。 根据您的带宽和存储库的大小,这可能需要很长时间。
有一个更快的方法来做到这一点。 它涉及将当前的主人复制到新的位置,然后执行一些技巧将其变成奴隶。 我将离开自动或实时同步的实际执行。
在这个答案中,我们假设:
我已经多次使用这个方法,使用了一个20多GB的Subversion版本库,通过将这样创build的slave复制回master,我也成功地恢复了一个破损的master。
我们将复制主服务器并将其传输到远程服务器上的资源所在的目录:
svnadmin hotcopy repo repo_bak tar -cjf repo_bak.tar.bz repo_bak scp repo_bak.tar.bz [email protected]:/path/
hotcopy命令允许您安全地复制当前正在使用的存储库并保持一致。
解压缩从服务器上的压缩包和所有的…
我们假设在从属服务器上运行一个Web服务器,该服务器被configuration为以通常的方式提供存储库。 另外,它需要钩子脚本来防止除同步帐户之外的任何帐户提交,原因很明显,我们希望存储库完全相同。 再次如何做这是超出了这个答案的范围。
我们在主存储库上运行以下所有命令。
将主存储库绑定到从属存储库:
svn propset svn:sync-from-url --revprop -r 0 file:///example/path/repo https://slave.example.org/repo
找出从属仓库的修订版本,这也将给你下面你将需要的UUID:
svn info https://slave.example.org/repo
在以下命令中使用上面find的版本:
svn propset svn:sync-last-merged-rev --revprop -r 0 REVISION_OF_SLAVE https://slave.example.org/repo
我们需要使用上面find的UUID添加到主存储库:
svn propset svn:sync-from-uuid --revprop -r 0 UUID_OF_SLAVE https://slave.example.com/repo
如果一切顺利,现在可以成功同步从站:
svnsync sync https://slave.example.org/repo
正确的地方阅读有关运行Subversion的存储库复制svnsync:
PS – 你必须在主机上有完整的master-repo镜像 ,但你可以尝试从空的repo开始,但是通过svnadmin dump克隆到某个点( 不是hotcopy! )