因为 Sonatype Nexus 3 OSS 开始不用 OrientDB 了,升级的时候撞板。于是翻来翻去找到了对应的迁移指南。
首先,去备份数据库,创建数据备份任务。Nexus 的数据库用的是 OrientDB 的话,那么仅会出现 Admin - Export Database for backup,并在结果中出现 bak 文件。同时,System Information 中 nexus.orient.enabled
也会是 true
(根据文档)。我是将数据库输出放在了 /nexus-data/backup
里面,然后再挪出来操作。
接下来,就按照说明迁移数据库(原文链接)。
步骤:
- 从 3.70.x 之前的版本将数据库从 OrientDB 迁移到 H2
- 待在当前版本直接启动,等待后台迁移完成
- 跳到 3.71.x,并升级到后续版本
迁移数据库
从 Sonatype 网站下载数据库迁移工具。
需要 Java 版本是 11 或 8。因为 OrientDB 最高只支持 Java 11。迁移数据库的时候服务器需下线。
我写了个 shell 脚本放在了 /tools
下面,跟 jar 包一起挂载进去,这样方便操作。
1 | !/usr/bin/env bash |
如果是 Java 11 的容器环境,VM 参数需要加上 --add-exports java.base/sun.nio.ch=ALL-UNNAMED
。
命令需要在数据库备份文件目录中执行。例如我将备份出来的 .bak
都放在了 /backup
,就要进去之后再运行。
成功后会出来一个 nexus.mv.db
的文件,将这个文件移动到 /nexus-data/db
中。
我写了个脚本创建一个一次性容器,方便进入作停机维护操作:
1 | !/usr/bin/env bash |
修改配置文件
接着,需要修改 nexus3 配置文件:/nexus-data/etc/nexus.properties
找到并修改,或者新增一行:
1 | nexus.datastore.enabled=true |
保存,启动服务器并等待迁移完成。
等待迁移完成
Background Migration 是这两个任务的发起:
- Rebuild repository browse
- Rebuild repository search
根据文档,可以拿这些关键字去查看完成了没:
1 | repository.rebuild-index |
一个简单的脚本查询对应的 nexus 日志记录,进入到 /nexus-data/log
中执行:
1 | tr '\n' '|' <<-EOF | sed -e 's/^/\\[\(/' -e 's/|$/)\\]\.\*->\\sOK/' | grep -E -f - nexus.log |
迁移完成后
Nexus3 启动的时候,可能会看到一条日志:
1 | [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - Database directory contains unsupported legacy database files; remove legacy files as soon as possible. |
根据搜索到的 Github Issue,以及 Sonatype 的论坛发帖,根据员工的描述,除了 nexus.mv.db
以外,其他的内容都建议存档并移除。