SonarQube 8.9 → 9.9 升级过程:出现「SonarQube is under maintenance」维护页面完整解决方案

#问题来源#

综合了所有的现实系统考虑后,最后决定使用9.98版本,来满足现在的需求,结果又卡壳了。。。。一波三折

背景:

将8.9版本的数据从PG10导出后,直接导入9.9对应的PG14A版本,,使用pg_dumall,导出的sql,导入后,启动服务一直停留在维护页面,停留了一夜

一、页面含义

这个页面代表 SonarQube 正在执行数据库迁移升级,属于版本跨代升级必经流程: 8.9(LTS)升级至 9.9(LTS)会自动触发数据库结构变更,服务会进入维护锁状态,禁止用户访问,迁移完成后页面自动恢复。

二、分场景排查处理

场景 1:刚启动升级,页面刚出现(正常等待阶段)

  1. 不要刷新、不要重启服务,等待后台执行数据库迁移;
  2. 查看 SonarQube 日志目录 sonarqube/logs/sonar.log,观察日志关键词:
    • Executing migration step:正在执行表结构、索引、数据迁移
    • Migration completed:迁移完成,页面会自动退出维护模式
  3. 迁移耗时取决于数据库数据量:
    • 小项目(十万行代码内):5--30 分钟
    • 大量历史项目、千万级扫描记录:1--4 小时都正常

场景 2:长时间停留在维护页,日志报错(卡死 / 迁移失败)

1)前置校验:升级前置条件是否满足(8.9→9.9 硬性要求)
  1. 数据库版本
    • PostgreSQL ≥9.6(推荐 13+);MySQL/Oracle 部分旧版本不再支持 若使用 MySQL,9.9 已大幅限制兼容,推荐切换 PostgreSQL
  2. Java 运行环境 SonarQube 9.9 必须使用 Java 17,不能沿用 8.9 的 Java11,否则迁移直接崩溃
  3. 磁盘空间 数据库磁盘预留至少原库 30% 空闲空间,迁移会生成临时表 / 备份数据
  4. 插件兼容 8.9 旧插件大多不兼容 9.9,升级前全部移除 extensions/plugins 目录下第三方插件,升级完成后再安装适配 9.9 的新版插件
2)常见报错与修复
报错 1:数据库权限不足

日志出现 permission denied for table 解决:给 SonarQube 数据库账号授予 ALTER, CREATE, DROP, INDEX, REFERENCES 全部权限。

报错 2:内存不足迁移中断

日志 OutOfMemoryError 修改 sonarqube/conf/sonar.properties 调整 JVM 参数:

复制代码
# 迁移阶段调高内存
sonar.web.javaOpts=-Xmx4G -Xms2G
sonar.ce.javaOpts=-Xmx4G -Xms2G
sonar.search.javaOpts=-Xmx2G -Xms1G

修改后重启 SonarQube,会继续上次未完成的迁移。

报错 3:8.9 旧数据库结构脏数据 / 约束冲突
  1. 先停止 SonarQube 服务;
  2. 备份完整数据库;
  3. 进入数据库执行脏数据清理(根据日志报错表删除无效外键 / 重复索引);
  4. 重启服务重新触发迁移。

场景 3:管理员误操作,想跳过 / 重置维护锁(不推荐优先用)

只有确认数据库迁移完全失败且回滚备份后才能执行:

  1. 停止 SonarQube;
  2. 连接数据库,执行 SQL 清空维护标记:
bash 复制代码
UPDATE properties SET text_value='' WHERE kee='sonar.core.maintenance.lock';
  1. 重启服务,会重新发起完整迁移。

警告:迁移中途执行此操作会直接损坏数据库,仅回滚备份后使用!

三、标准 8.9→9.9 升级完整步骤(避免卡死维护页)

  1. 全量备份
    • SonarQube 安装目录完整备份
    • PostgreSQL/MySQL 数据库全量备份
  2. 停止旧 8.9 服务
  3. 替换为 9.9 安装包,保留 conf/sonar.properties 数据库配置
  4. 删除旧插件目录所有第三方插件
  5. 配置 Java17 环境变量,修改 JVM 内存参数
  6. 启动 9.9 服务,只查看日志,不访问页面
  7. 日志输出 Migration completed successfully 后,刷新页面登录
  8. 登录后安装适配 9.9 的新版代码语言插件

四、补充提示页面两段文字说明

  1. install SonarLint in your IDE 维护等待期间可提前在本地 IDE 安装 SonarLint,本地实时扫描替代等待服务恢复。
  2. read the upgrade guide 官方升级文档:专门说明跨 LTS 版本(8.9→9.9)数据库迁移、兼容性、回滚方案,出现异常优先查阅官方升级指南。

综合定位是数据库库的权限没有给足,很奇怪,原来的导出的脚本中有sonarqube用户的授权等信息,解决后问题还是没有解决,接着继续定位

相关推荐
天天喝旺仔13 天前
CI/CD 实战:GitHub Actions 自动化构建、测试与发布流水线
ci/cd·自动化·github·devops·持续集成
2601_962284171 个月前
Testin XAgent支撑下的智能测试实践:多端自动化如何真正落地
自动化测试·持续集成·ai测试·智能测试·跨平台测试
deepseek231 个月前
从 MCP 工具定义自动生成 Agent 评测集:把可靠性验证接入 CI
持续集成·ai agent·mcp·llm 评测
qq_161111272 个月前
Jenkins+Python自动化测试持续集成详细教程
自动化测试·python·jenkins·教程·持续集成
龙智DevSecOps解决方案2 个月前
CI/CD | AI Agent 自主配置 TeamCity 构建链实战:从文档读取到流水线跑通全过程
ci/cd·持续集成·ai agent·teamcity
增量星球2 个月前
《持续交付2.0系列九》从手动到自动之持续集成
运维·ci/cd·持续部署·持续集成
增量星球3 个月前
《持续交付2.0系列六》业务需求协作管理
java·运维·自动化·devops·持续部署·持续集成
平头老王4 个月前
CI/CD流水线设计 — 第1章:常见误区
ci/cd·自动化·devops·持续部署·持续集成
zlinear数据采集卡4 个月前
输出短路保护电路深度解析:从电源的“最后一道防线”到ZLinear采集卡的硬核守护实战
开发语言·嵌入式硬件·持续集成