凌峰创科服务平台

Windows SVN服务器迁移要注意什么?

核心迁移思路

迁移的核心思想是:安全、完整、无缝地将旧服务器的“数据”和“用户认证”信息迁移到新服务器

Windows SVN服务器迁移要注意什么?-图1
(图片来源网络,侵删)
  1. 数据迁移:将版本库(repository)文件从旧服务器复制到新服务器。
  2. 用户认证迁移:将旧服务器的用户名和密码/权限配置迁移到新服务器,这取决于你使用的认证方式(SVN自带的 svnserve 或 Apache HTTP Server)。

迁移前准备

确定迁移方案

根据你的当前 SVN 服务器架构,选择合适的迁移路径:

当前服务器环境 推荐迁移方案 说明
SVN + svnserve (独立服务) 直接文件复制 最简单、最直接的方法,直接复制版本库文件,并在新服务器上用相同的配置启动 svnserve
SVN + Apache (HTTP/S 协议) 文件复制 + Apache 配置同步 除了复制版本库,还需要将 Apache 的配置文件(如 httpd.conf, authz, htpasswd)同步到新服务器。
SVN + VisualSVN Server (图形化界面) 使用 VisualSVN Server 迁移工具 最推荐、最安全的方法,VisualSVN Server 提供了专门的备份和恢复功能,可以完美迁移服务器配置。

评估停机时间

  • 完全停机迁移:最简单,但业务会中断,适用于非核心或可接受短暂中断的场景。
  • 在线/零停机迁移:更复杂,但用户几乎无感知,适用于核心业务系统。

本指南主要介绍最常用的 完全停机迁移,因为它最可靠且易于操作。

Windows SVN服务器迁移要注意什么?-图2
(图片来源网络,侵删)

准备新服务器

  • 操作系统:建议新服务器的操作系统版本与旧服务器保持一致或更高,以避免兼容性问题。
  • 安装 SVN 软件:在新服务器上提前安装好相同版本的 SVN 客户端和服务器端软件。
    • 对于 svnserve:安装 Subversion
    • 对于 Apache:安装 SubversionApache HTTP Server
    • 对于 VisualSVN Server:安装 VisualSVN Server
  • 规划目录结构:在新服务器上规划好 SVN 版本库的存放路径(D:\SVN\Repos),并确保该目录有足够的磁盘空间。

备份旧服务器

在开始任何操作前,务必备份旧服务器

  • 版本库备份:这是最重要的数据。
  • 配置文件备份
    • svnservesvnserve.conf 文件。
    • Apache:httpd.conf, authz, htpasswd 等所有相关配置文件。
    • VisualSVN Server:整个 VisualSVN Server 的安装目录或其自带的备份功能。

详细迁移步骤 (以最常见的 svnserve 为例)

假设你的旧服务器是 Windows Server,使用 svnserve 作为服务器,版本库位于 D:\svn\repos

Windows SVN服务器迁移要注意什么?-图3
(图片来源网络,侵删)

第一步:在旧服务器上停止 SVN 服务

  1. 打开“服务”管理界面(services.msc)。
  2. 找到名为 SVNService (或类似名称) 的服务。
  3. 右键点击,选择“停止”。
  4. 确认:所有通过 SVN 访问该服务器的客户端都会连接失败,这表示迁移窗口已开启。

第二步:备份旧服务器的版本库

虽然前面建议备份,但这是最后也是最关键的一次数据提取。

  1. 打开命令提示符(CMD)。
  2. 使用 svnadmin hotcopy 命令创建一个版本库的“热备份”,这个命令可以在 SVN 服务运行时进行,但我们已经停止了服务,所以用 svnadmin dump 也可以,但 hotcopy 更快且包含所有钩子脚本。
    svnadmin hotcopy "D:\svn\repos\MyProject" "C:\backup\MyProject_backup"
    • D:\svn\repos\MyProject 是你的版本库路径。
    • C:\backup\MyProject_backup 是备份目标路径。
  3. 将这个备份文件夹(MyProject_backup)复制到新服务器上,或者打包后通过网络传输。

第三步:复制版本库到新服务器

  1. 在新服务器上,创建与旧服务器相同的版本库目录结构,D:\SVN\Repos
  2. 将上一步备份的 MyProject_backup 文件夹,完整地复制到新服务器的 D:\SVN\Repos 目录下。
    • 重要:直接复制 hotcopy 出来的整个文件夹,而不是进入该文件夹再复制内容,这能保证权限和目录结构完整。
    • 复制完成后,你的新服务器版本库路径应为 D:\SVN\Repos\MyProject_backup,你可以根据需要重命名它为 MyProject

第四步:在新服务器上配置 SVN 服务

  1. 创建 svnserve.conf 配置文件

    • 在版本库目录(D:\SVN\Repos\MyProject)下,找到 conf 文件夹。
    • 编辑 svnserve.conf 文件,确保其内容与旧服务器完全一致,特别是以下部分:
      [general]
      # 匿名用户无权限
      anon-access = none
      # 认证用户有读写权限
      auth-access = write
      # 指定密码数据库文件路径
      password-db = passwd
      # 指定权限控制文件路径
      authz-db = authz
      # 使用 realms,建议与仓库名一致
      realm = MyProject Repository
  2. 创建 passwdauthz 文件

    • passwd:将旧服务器版本库 conf 文件夹下的 passwd 文件内容,复制到新服务器的对应文件中,这个文件存储了用户名和密码(明文或MD5)。
    • authz:同样,将旧服务器的 authz 文件内容复制过来,这个文件定义了用户和组的访问权限。
  3. 创建 svnserve 服务

    • 打开新服务器的命令提示符(CMD),以管理员身份运行。
    • 执行以下命令来创建一个新的 SVN 服务:
      sc create SVNService binPath= "C:\Program Files\CollabNet Subversion Server\svnserve.exe --service --root D:\SVN\Repos" start= auto depend= Tcpip
      • binPath:请根据你实际安装的 svnserve.exe 路径进行修改。
      • --root D:\SVN\Repos非常重要,这个参数告诉 svnserve 在哪个根目录下查找所有版本库。
      • start= auto:设置为开机自启。
      • depend= Tcpip:表示该服务依赖于 TCP/IP 协议。

第五步:启动新服务器上的 SVN 服务

  1. 在新服务器的“服务”管理界面(services.msc)中,找到刚刚创建的 SVNService
  2. 右键点击,选择“启动”。
  3. 检查服务状态:确保服务已成功启动,并且没有报错。

第六步:客户端验证

  1. 更新客户端配置:通知所有 SVN 用户,将他们客户端工具(如 TortoiseSVN、IDE 插件)中的仓库 URL 从旧服务器的地址更改为新服务器的地址。
    • 旧地址:svn://旧服务器IP/MyProject
    • 新地址:svn://新服务器IP/MyProject
  2. 测试连接:让用户尝试从新地址检出(Checkout)或更新(Update)项目。
    • 系统会提示输入用户名和密码。
    • 使用旧服务器上的凭据进行登录。
    • 成功:如果能正常连接、检出文件,并显示最新的版本号,说明迁移成功。
    • 失败:检查防火墙设置、svnserve 服务是否运行、svnserve.confpasswd/authz 文件配置是否正确。

第七步:旧服务器处理

在确认新服务器稳定运行一段时间(例如一天)后,可以安全地处理旧服务器:

  • 停止并删除 SVN 服务。
  • 备份并归档旧版本库数据(以防万一)。
  • 关闭或重新分配旧服务器。

针对不同方案的额外说明

SVN + Apache 迁移

  1. 数据迁移:同上,使用 svnadmin hotcopy 复制版本库。
  2. 配置迁移
    • 将旧服务器 Apache 的整个配置目录(通常是 Apache24\conf)复制到新服务器。
    • 关键:修改新服务器 Apache 的 httpd.conf 文件,确保其中的 LoadModule, Location, SVNPath 等路径指向新服务器上的版本库位置。
    • 确保 authzhtpasswd 文件路径正确。
  3. 启动服务:在新服务器上启动 Apache 服务。

VisualSVN Server 迁移 (推荐)

这是最简单、最不容易出错的方法。

  1. 在旧服务器上创建备份

    • 打开 VisualSVN Server Manager。
    • 右键点击你的服务器名称,选择 "All Tasks" -> "Backup"。
    • 选择备份位置,并勾选 "Backup server settings"(非常重要,这会备份所有用户、权限和仓库配置)。
    • 开始备份,会生成一个 .visb 备份文件。
  2. 在新服务器上恢复

    • 在新服务器上安装相同版本或更高版本的 VisualSVN Server。
    • 打开 VisualSVN Server Manager。
    • 右键点击服务器名称,选择 "All Tasks" -> "Restore"。
    • 选择你刚才创建的 .visb 备份文件。
    • 按照向导完成恢复,VisualSVN Server 会自动恢复所有仓库、用户、组和权限配置。
  3. 验证

    • 恢复完成后,VisualSVN Server 服务会自动重启。
    • 客户端只需将仓库 URL 从旧服务器地址改为新服务器地址即可,无需任何其他操作。

常见问题与排查

  • 问题:客户端连接新服务器时提示“Could not connect to server”。

    • 排查
      1. 新服务器防火墙是否放行了 SVN 端口(默认 3690)?
      2. 新服务器 svnserve 服务是否正在运行?
      3. 在新服务器上用 telnet 新服务器IP 3690 测试端口是否可达。
  • 问题:客户端提示“Authentication failed”。

    • 排查
      1. 用户名或密码是否错误?(区分大小写)
      2. 新服务器版本库 conf/passwd 文件中是否有该用户?
      3. conf/svnserve.conf 文件中 password-db 指向的路径是否正确?
  • 问题:客户端提示“Authorization failed”。

    • 排查
      1. 用户是否有权限访问该仓库?
      2. 新服务器版本库 conf/authz 文件中的路径和权限规则是否配置正确?检查 [groups] 和仓库路径下的用户权限。
  • 问题:迁移后文件版本号不正确或历史丢失。

    • 排查:最可能的原因是备份或复制时数据不完整。务必使用 svnadmin hotcopysvnadmin dump,而不是简单地复制文件,检查备份文件的大小是否与原仓库相当。

希望这份详细的指南能帮助你顺利完成 SVN 服务器的迁移!

分享:
扫描分享到社交APP
上一篇
下一篇