升级SonarQube至6.7.1 LTS遇无法恢复的索引失败问题求助
我来帮你一步步排查这个SonarQube升级启动失败的问题——结合你说的从6.5升级到6.7.1 LTS、连接SQL Server 2014数据库,空库能正常启动但旧库报错的情况,大概率是数据库升级过程中的兼容性或数据迁移问题,你可以按下面的步骤逐一验证:
优先查看详细日志定位根因
SonarQube的Background initialization failed只是表层错误,具体原因藏在日志里。你可以到$SONARQUBE_HOME/logs目录下,重点查看web.log和ce.log文件,里面会有完整的错误栈信息。比如有没有类似Table 'sonar.xxx' doesn't exist、Column 'yyy' violates NOT NULL constraint或者权限不足的报错,这些是快速定位问题的关键。检查数据库迁移脚本的执行状态
SonarQube升级时会自动执行数据库迁移脚本,但旧版本的异常数据可能导致脚本执行失败。你可以登录SQL Server数据库,查询schema_migrations表,看看从6.5到6.7.1的所有迁移脚本是否都标记为success。如果有失败的记录,对应脚本可能需要手动调整后重新执行(注意:操作前一定要备份数据库)。验证数据库账号权限与SQL Server兼容性
- 空库启动正常说明基础连接没问题,但旧库升级需要更多权限:确保SonarQube使用的数据库账号拥有创建/修改表、索引、触发器的权限,因为升级过程中需要修改数据库结构。
- 检查SQL Server的兼容性级别:6.7.1 LTS支持SQL Server 2014,但要确保数据库的兼容性级别设置为120(SQL Server 2014默认级别)。可以用以下SQL查询:
如果不是120,执行以下命令修改:SELECT compatibility_level FROM sys.databases WHERE name = '你的SonarQube数据库名';ALTER DATABASE 你的SonarQube数据库名 SET COMPATIBILITY_LEVEL = 120;
排查旧版本数据的异常情况
6.5版本的某些数据可能不符合6.7.1的新约束,比如字段长度超限、空值违规等。如果日志里提到了具体的表或字段,你可以针对性查询数据,比如:SELECT * FROM sonar.issues WHERE 异常字段名 IS NULL;找出异常数据并修正后再尝试启动。另外,还要排查第三方插件的兼容性——6.5的某些自定义插件可能不兼容6.7.1,你可以先禁用所有第三方插件,只保留默认插件启动,如果正常了,再逐个启用插件排查问题。
备份后尝试手动执行升级脚本(谨慎操作)
如果前面的步骤都没解决问题,建议先完全备份数据库,然后手动运行SonarQube的升级脚本。6.7.1的SQL Server升级脚本在$SONARQUBE_HOME/data/database/migration/sqlserver目录下,找到从6.5到6.7.1的所有脚本,按文件名顺序执行,执行过程中观察是否有报错,这样能精准定位哪个脚本出了问题。
内容的提问来源于stack exchange,提问作者pjd010

