从备份中恢复 TeamCity 数据
TeamCity 管理员能够通过 TeamCity 用户界面或手动使用 maintainDB
命令行工具来恢复 备份的数据。
note
服务器复制
如果您正在创建服务器的副本,请在恢复后务必查阅 复制的服务器检查表。
您可以将备份的数据恢复到同一数据库或不同的数据库中;从 / 到任何 支持的数据库 (例如,您可以将 HSQL 数据库的数据恢复到 PostgreSQL 数据库,也可以将 PostgreSQL 数据库的备份恢复到新的 PostgreSQL 数据库)。
可以使用 TeamCity 的更新版本来恢复由任何先前的 TeamCity 版本创建的备份(前提是 TeamCity 版本晚于 6.0)。
在恢复大型数据库时,您可能希望配置特定于数据库的设置以使批量数据更改更快(例如将 SQL Server 的 "Recovery Model" 设置为 "Simple")。 请咨询您的数据库管理员获取更多详细信息。
一个 TeamCity 备份文件不包含构建工件。 要备份构建日志和工件,请手动将 工件目录 (默认情况下为 <TeamCity Data Directory>
/system/artifacts
)中的内容从旧位置复制到新位置。 数据 system/artifacts
的一般兼容性规则是,由旧版 TeamCity 创建的文件可以被新版读取,但反过来可能不一定成立。
当启用 外部制品存储 时,TeamCity 数据目录的 制品目录 将包含制品映射的元数据,因此请确保对它们进行了恢复。
请参阅 TeamCity Data Directory 描述中的目录详细信息。
请注意, 在服务器启动前复制工件 很重要,因为从备份恢复的服务器启动时会自动启动构建元数据的重新索引。 如果在索引期间缺少某些工件,这可能会导致 TeamCity 服务器的某些部分出现故障(例如,NuGet 源)。 如果在服务器启动后复制了工件(或在服务器启动前未完成工件的复制),您可能需要 手动重新索引构建元数据 ,并等待重新索引完成。
TeamCity 可以自动恢复备份数据到 一个新的 TeamCity 安装 (例如,创建一个现有服务器的副本)。 这个过程依赖于 maintainDB
工具,但会在后台执行所有必要的操作:
在浏览器中打开 TeamCity URL(默认情况下,对于
exe
安装为http://localhost/
,对于tar.gz
为http://localhost:8111/
)。在 TeamCity 首次启动页面上,输入 数据目录的路径,然后单击 从备份中恢复。
在 TeamCity 服务器上输入备份目录的绝对路径,或者上传一个包含备份数据的 ZIP 归档文件。
选择目标数据库。 如果您使用外部数据库,请配置其地址和凭证。
继续进行恢复。
TeamCity 将恢复数据并显示 maintainDB
实用程序日志。 如果备份数据的版本早于当前版本,TeamCity 将建议您进行升级。
note
自动恢复的限制
只有在备份文件中同时存在数据库和配置的构建才能自动恢复。 带有 custom scope 的一些备份文件可能无法正确恢复。
如果自动恢复遇到错误(例如,数据库内存不足),您将需要手动清理数据库,然后再次尝试恢复。
在这两种情况下,我们建议您通过
maintainDB
手动恢复 TeamCity ,如下所述。
为了将备份的文件恢复到 现有的 TeamCity 安装 ,或者克服自动恢复的限制,手动使用 maintainDB
工具。 本节描述了 只有一些maintainDB
选项。 要获取所有可用选项的完整列表,请在没有参数的情况下从命令行运行 maintainDB
。 另请参见 maintainDB 启动选项。
通过 maintainDB
从备份文件中进行恢复:
从
tar.gz
或.exe
安装包中安装 TeamCity 服务器。 不要启动 TeamCity 服务器。创建一个新的空的 TeamCity 数据目录。
选择以下选项之一:
要将备份恢复到 新的外部数据库 中,请 创建并配置一个空数据库 ,配置一个
database.properties
文件,其中包含稍后传递给恢复
命令的数据库设置,并将其放置在新创建的 TeamCity 数据目录的/配置
子目录中,或放置在 TeamCity 数据目录之外的文件系统中的任意位置。要将数据恢复到 与创建备份时使用的相同数据库 中,请继续下一步。
将所需的 数据库驱动程序 放入新创建的 TeamCity Data Directory 目录的
lib/jdbc
子目录中。使用位于
<TeamCity Home>
/bin
目录中的maintainDB
实用工具运行恢复
命令:a. 将备份恢复到 新的外部数据库 中
如果
database.properties
文件位于 TeamCity 数据目录中:
maintainDB.[cmd|sh] restore -A <absolute path to the newly created TeamCity Data Directory> -F <path to the TeamCity backup file> -T <config/database.properties>
如果
database.properties
文件位于 TeamCity 数据目录之外:
maintainDB.[cmd|sh] restore -A <absolute path to the newly created TeamCity Data Directory> -F <path to the TeamCity backup file> -T <absolute path to the database.properties file of the target database on the file system outside data dir>
b. 将数据恢复到 与创建备份时使用的相同数据库 中:
maintainDB.[cmd|sh] restore -A <absolute path to the newly created TeamCity Data Directory> -F <path to the TeamCity backup file>
c. 将备份恢复到 内部数据库 中:
maintainDB.[cmd|sh] restore -A <absolute path to the newly created TeamCity Data Directory> -I -F <path to the TeamCity backup file>
如果该过程成功完成,要 完成还原 ,您需要 复制 通过
<TeamCity Data Directory>
/system/artifacts
从旧目录中进行操作。 该目录储存工件,但它们未被包含在备份文件中。
关于 恢复
命令选项的注释:
如果您已设置
TEAMCITY_DATA_PATH
环境变量,那么可以省略-A
参数。-F
参数可以是绝对路径,也可以是相对于<TeamCity Data Directory>
/system/backup
目录的路径。-T
参数必须指向在步骤 3 中创建的database.properties
文件。如果没有指定
-T
参数,并且新创建的<TeamCity 数据目录>/config
和备份文件中存在database.properties
文件,则数据库会使用<TeamCity 数据目录>/config
中的属性文件进行恢复。默认情况下,如果没有指定除
-F
之外的其它选项,所有备份范围将从备份文件中恢复。 要从备份文件中只还原特定范围,请使用maintainDB
工具的相应选项:-D
,-C
,-U
,-L
和-P
。
tip
要获取
maintainDB
可用选项的参考,请不带任何命令或选项运行实用程序。
在恢复数据库但保留较新的 TeamCity Data Directory 时,确保数据的一致性非常重要:
<TeamCity Data Directory>
/system/pluginData
(补充数据 )也应恢复,以保持与存储在数据库中的数据一致。<TeamCity Data Directory>
/system/caches
应在服务器启动前清除。
在将 TeamCity 数据库恢复到现有服务器之前,请确保 TeamCity 服务器未在运行。
要从备份文件中只恢复 TeamCity 数据库到现有服务器:
创建并配置数据库 ,将
database.properties
文件放入TeamCity Data Directory(TeamCity 数据目录)
的配置
子目录中。确保所需的数据库驱动程序存在于
/lib/jdbc
子目录中。使用位于
<TeamCity Data Directory>
/bin
目录中的maintainDB
实用工具(仅适用于 TeamCity.tar.gz
和.exe
发行版)。如果备份中存在 补充数据 ,请删除
<TeamCity Data Directory>
/system/pluginData
目录的内容(建议先将其备份到其他位置)。使用
恢复
命令(-T
参数必须指向在第一步中创建的database.properties
文件):maintainDB.[cmd|sh] restore -A <absolute path to TeamCity Data Directory> -F <path to the TeamCity backup file> -T <path to the database.properties file of the target database> -D
查看
maintainDB
工具控制台输出。 如果有要求,您可能需要手动复制database.properties
文件。删除
<TeamCity Data Directory>
/system/caches
目录的内容。
恢复过程可能会因以下原因被中断:
文件系统或数据库中的空间不足
对文件系统或数据库权限不足
当某个表或索引未能恢复时,会在 maintainDB
实用工具控制台输出中指示中断。
在恢复继续之前 ,请手动从数据库中删除恢复不正确的对象。
要在中断后恢复备份恢复,请
运行带有所需选项和 --继续
选项的 maintainDB
实用程序,并执行 恢复
命令:
maintainDB.[cmd|sh] restore <all previously used restore options> --continue