SonarQube 4.5.7到5.6.5 DB升级失败

时间:2017-02-17 18:59:34

标签: sonarqube sonarqube-ops

我试图将SonarQube实例从4.5.7 LTS升级到5.6.5 LTS。我按照提供的SonarQube升级文档进行了操作。浏览到[sonarserver]后:9000 / setup并运行数据库升级。升级运行了2个多小时,然后回复了这条消息:

Upgrade Failed

Database connection cannot be established. Please check database status and JDBC settings.

查看日志时,我看到此错误:

2017.02.16 13:18:43 ERROR web[o.s.s.d.m.DatabaseMigrator] Fail to execute database migration: org.sonar.db.version.v50.FeedFileSources
java.lang.IllegalStateException: Error during processing of row: [uuid=AVpHrbhU29-XDi5QdhtN,uuid=AVpHrbk629-XDi5Qdh0r,data=using System;

我在这里复制了整个数据库升级日志:http://pastebin.com/p9CkYhrU

我还尝试重新启动SonarQube并再次尝试数据库升级,但它运行了5到10分钟并报告了相同的结果。

其他详情:

当前的SonarQube:4.5.7 LTS

新SonarQube:5.6.5 LTS

DB:MySQL 5.7.17

操作系统:Windows Server 2012 R2

升级失败后,我们成功恢复到4.5.7。

我们之前也从4.3.1升级到4.5.7 LTS。在此升级过程中,我们将SonarQube数据库从MySQL 5.5移至5.7.17,然后将SonarQube升级至4.5.7 LTS。此升级步骤运行了两个小时并成功完成。

感谢您的帮助,

-Eddie

1 个答案:

答案 0 :(得分:1)

更新2/21/17

我在另一台服务器上为这个SonarQube升级站了一个测试实例。我使用相同的备份数据安装了MySQL 5.7和SonarQube 4.5.7 LTS。在升级到SonarQube 5.6.5 LTS期间,我收到了与以前相同的错误。所以我在这一点上知道我可以复制错误。我决定再次查看该错误消息并进一步发现这些消息:

Caused by: java.sql.BatchUpdateException: Packet for query is too large         (6371233 > 4194304). You can change this value on the server by setting the         max_allowed_packet' variable.

Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too     large (6371233 > 4194304). You can change this value on the server by setting     the `max_allowed_packet` variable.

所以我继续编辑my.ini中的max_allowed_packet变量。首先我将其从4M更改为8M并收到类似错误。接下来,我将变量更改为16M并且升级超过了错误!

不幸的是,数据库升级再运行了11个小时,又出现了另一个错误:

2017.02.21 02:48:13 ERROR web[o.s.s.d.m.DatabaseMigrator] Fail to execute database migration: org.sonar.db.version.v564.CleanUsurperRootComponents
java.lang.IllegalStateException: Error during processing of row: [id=62566,uuid=AVpc2I0gt4GsKrhSYYYQ]
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Application was streaming results when the connection failed. Consider raising value of 'net_write_timeout' on the server.
Caused by: java.net.SocketException: Connection reset

我将mysql中的net_read_timeout从60增加到1200. set net_write_timeout = 1200;我重新启动SonarQube,再次运行数据库升级,并通过了错误。升级继续运行,我收到了另一个错误:

2017.02.21 09:57:05 ERROR web[o.s.s.d.m.PlatformDatabaseMigration] DB Migration or container restart failed. Process ended with an exception java.lang.IllegalStateException: Fail to load plugin Clirr [clirr]
Caused by: java.lang.NoClassDefFoundError: org/sonar/api/batch/maven/DependsUponMavenPlugin
Caused by: java.lang.ClassNotFoundException: org.sonar.api.batch.maven.DependsUponMavenPlugin

看起来像一个插件错误,所以我继续前进并查看了该插件。我发现了一些关于Clirr插件被弃用的信息,所以我从Plugins文件夹中删除了它,重新启动了SonarQube,并且遇到了另一个插件错误(不同的插件)。我有6或7个这样的错误,并且能够通过使用较新的兼容版本删除或替换Plugins文件夹中的.jar来修复它们。

所以在修复Java插件之后,我重新启动了SonarQube,它启动得很好!我现在在沙盒服务器上运行SonarQube 5.6.5 LTS。下一步将是我恢复到4.5.7 LTS并再次尝试升级,以确保我将来有一个成功的生产升级。