数据库文件损坏太严重,连 H2 恢复工具都无法读取。现在只能删除并重建数据库。
🚨 立即执行:删除损坏数据库并重建
bash
# 1. 停止 Nexus
kubectl scale deployment nexus3-deployment --replicas=0 -n default
# 2. 进入数据目录
cd /data/nexus-data
# 3. 完全删除损坏的数据库文件
rm -f nexus.mv.db
rm -f nexus.trace.db*
rm -f *.lock
rm -f *.pid
# 4. 删除 db 目录(如果存在)
rm -rf db/
# 5. 清理临时文件和缓存
rm -rf tmp/*
rm -rf cache/*
rm -rf instances/*
rm -rf lock/*
# 6. 确保目录存在且有正确权限
mkdir -p tmp log cache instances lock blobs etc backup
chown -R 200:200 /data/nexus-data/
chmod -R 755 /data/nexus-data/
chmod 777 tmp log cache instances lock
# 7. 启动 Nexus(会自动创建全新数据库)
kubectl scale deployment nexus3-deployment --replicas=1 -n default
# 8. 实时查看日志
kubectl logs -f -l app=nexus -n default
删除损坏的数据库并重建后,数据恢复的核心逻辑是:Nexus的物理文件(Blob)还在,我们需要通过重建数据库的元数据索引,让Nexus"重新认识"这些文件。
这就像你有一屋子的书(物理文件),但丢失了图书目录(数据库)。恢复的工作就是重新整理出一份新目录,指向这些书。
🔍 第一步:确认数据恢复前提
首先,需要确认你的Blob存储完好无损。在宿主机上执行:
bash
# 查看Blob存储目录结构和文件数量
ls -la /data/nexus-data/blobs/
find /data/nexus-data/blobs/ -name "*.bytes" | wc -l
如果能找到大量.bytes文件,说明组件数据完好,这是恢复的基础。
🛠️ 第二步:执行系统恢复任务
这是最核心的步骤。请按顺序执行以下操作:
- 登录Nexus控制台 :访问
http://<your-nexus-host>:8081,使用管理员账号登录。 - 执行"从Blob存储协调组件数据库"任务 :
- 进入 管理(Administration) -> 系统(System) -> 任务(Tasks) -> 创建任务(Create Task)。
- 类型选择 "Repair - Reconcile component database from blob store"。
- 在配置界面,将"Blob store"字段设置为
default(或你实际使用的Blob存储名称),然后点击"创建任务(Create Task)"。 - 回到任务列表,找到刚创建的任务,点击右侧的"运行(Run)"按钮并等待其完成。




📋 第三步:执行其他辅助恢复任务
为了确保Nexus的各个功能(如搜索、浏览)完全恢复正常,建议在上一步任务成功完成后,继续创建并按顺序运行以下任务(同样在"管理" -> "系统" -> "任务"中创建并运行):
| 恢复任务名称 | 作用 |
|---|---|
Repair - Rebuild repository browse |
重建仓库的浏览树,解决Web界面查看组件时的问题。 |
Repair - Rebuild repository search |
重建搜索索引,使搜索功能恢复正常。 |
Repair - Rebuild npm metadata |
(可选) 如果你使用npm仓库,运行此任务修复npm元数据。 |
✅ 第四步:验证恢复结果
任务执行完毕后,进行最终验证:
- 检查仓库内容:在Nexus Web界面,浏览你的仓库,确认之前存在的组件是否已重新出现。
- 验证下载功能:尝试从该仓库下载一个已知的组件,确认文件可以正常获取。
💡 补充说明与替代方案
- 补充建议:重启Pod :如果你的Nexus Pod在任务运行后状态不稳定,执行
kubectl rollout restart deployment nexus3-deployment -n default重启Pod通常能解决临时问题。 - 关于专业工具 :社区中有一个名为 n3dr 的工具,可以通过API直接从Blob存储备份和还原组件。如果你的环境经常出问题,可以考虑用它作为额外的保险。
- 核心数据已保留 :请放心,只要
/data/nexus-data/blobs/目录下的文件没有被删除,你的所有组件(jar、npm包等)就是安全的。我们重建的只是指向它们的"数据库索引"。
完整恢复流程检查清单
- 确认 Blob 存储完好(文件存在、大小正常)
- 完整备份当前数据目录
- 停止 Nexus 服务
- 删除损坏的数据库文件
- 修复目录权限
- 启动 Nexus 验证启动成功
- 登录控制台获取初始密码
- 创建并运行 Reconcile 任务
- 创建并运行辅助修复任务
- 验证组件可访问、可下载
- 配置定期备份任务
📝 总结
Nexus 数据库损坏虽然会导致服务不可用,但只要 Blob 存储完好,通过删除损坏数据库 → 重建空数据库 → 执行 Reconcile 修复任务 这套流程,可以完整恢复所有制品数据。
核心要点:
- Blob 存储是命脉:所有二进制文件都在这里,务必定期备份
- Reconcile 是关键:它会扫描 Blob 重建数据库索引
- 辅助任务不能省:浏览、搜索、特定仓库格式都需要额外修复
- 预防胜于治疗:配置定期备份和优雅停机
希望本文能帮助你快速恢复 Nexus 服务,并建立完善的预防机制。