从备份中恢复 TeamCity 数据
TeamCity 管理员能够通过 TeamCity 用户界面或手动使用 maintainDB
命令行工具来恢复 备份的数据。
在还原之前
您可以将备份的数据恢复到同一数据库或不同的数据库中;从 / 到任何 支持的数据库 (例如,您可以将 HSQL 数据库的数据恢复到 PostgreSQL 数据库,也可以将 PostgreSQL 数据库的备份恢复到新的 PostgreSQL 数据库)。
可以使用 TeamCity 的更新版本来恢复由任何先前的 TeamCity 版本创建的备份(前提是 TeamCity 版本晚于 6.0)。
在恢复大型数据库时,您可能希望配置特定于数据库的设置以使批量数据更改更快(例如将 SQL Server 的 "Recovery Model" 设置为 "Simple")。 请咨询您的数据库管理员获取更多详细信息。
一份 TeamCity 备份文件 不包含构建的工件。 为备份构建日志和工件,手动将 artifact directory(默认为 <TeamCity 数据目录>/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 将建议您进行升级。
为了将备份的文件恢复到 现有的 TeamCity 安装,或者克服自动恢复的限制,手动使用 maintainDB
工具。 这部分只描述了 一部分 的 maintainDB
选项。 要获取所有可用选项的完整列表,请在没有参数的情况下从命令行运行 maintainDB
。 另请参见 maintainDB 启动选项。
通过 maintainDB
从备份文件中进行恢复:
从
tar.gz
或.exe
安装包中安装 TeamCity 服务器。 不要启动 TeamCity 服务器。创建一个新的空的 TeamCity 数据目录。
选择以下选项之一:
要将备份还原到一个新的外部数据库中,创建并配置一个空数据库,配置一个与数据库设置的
database.properties
文件以便稍后传递给恢复
命令,然后将其放置在新创建的TeamCity 数据目录的/配置
子目录中,或者放在您的文件系统的 TeamCity 数据目录之外的任何地方。要将数据恢复到备份创建的相同数据库中,请继续下一步。
将所需的 数据库驱动程序 放入新创建的 TeamCity Data Directory 目录的
lib/jdbc
子目录中。使用位于
<TeamCity 安装目录>/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 数据目录>/system/artifacts
。 该目录储存工件,但它们未被包含在备份文件中。
关于 恢复
命令选项的注释:
如果您已设置
TEAMCITY_DATA_PATH
环境变量,那么可以省略-A
参数。-F
参数可以是绝对路径,也可以是相对于<TeamCity 数据目录>/system/backup
目录的路径。-T
参数必须指向在步骤 3 中创建的database.properties
文件。如果没有指定
-T
参数,并且新创建的<TeamCity 数据目录>/config
和备份文件中存在database.properties
文件,则数据库会使用<TeamCity 数据目录>/config
中的属性文件进行恢复。默认情况下,如果没有指定除
-F
之外的其它选项,所有备份范围将从备份文件中恢复。 要从备份文件中只还原特定范围,请使用maintainDB
工具的相应选项:-D
,-C
,-U
,-L
和-P
。
仅恢复数据库
在恢复数据库但保留较新的 TeamCity Data Directory 时,确保数据的一致性非常重要:
<TeamCity 数据目录>/system/pluginData
(补充数据)也应该被恢复,以保持与数据库中存储的数据一致。<TeamCity 数据目录>/system/caches
应在服务器启动前清除。
在将 TeamCity 数据库恢复到现有服务器之前,请确保 TeamCity 服务器未在运行。
要从备份文件中只恢复 TeamCity 数据库到现有服务器:
创建并配置数据库,将
database.properties
文件放入TeamCity Data Directory(TeamCity 数据目录)
的配置
子目录中。确保所需的数据库驱动程序存在于
/lib/jdbc
子目录中。使用位于
<TeamCity 数据目录>/bin
目录中的maintainDB
工具(仅在 TeamCity.tar.gz
和.exe
分发版中提供)。如果备份中包含 补充数据,请删除
<TeamCity 数据目录>/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 数据目录>/system/caches
目录的内容。
在中断后恢复恢复
恢复过程可能会因以下原因被中断:
文件系统或数据库中的空间不足
对文件系统或数据库权限不足
当某一个表或索引无法被恢复时,就会发生中断,该情况会在 maintainDB
实用程序控制台输出中显示。
在恢复前,请手动从数据库中删除错误恢复的对象。
要在中断后恢复备份恢复,请运行带有所需选项和 --继续
选项的 maintainDB
实用程序,并执行 恢复
命令: