SonarQube 4.5.7 到 5.6.5 数据库升级失败

SonarQube 4.5.7 to 5.6.5 DB Upgrade failure

我已尝试将我们的 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

数据库:MySQL 5.7.17

操作系统:WindowsServer 2012 R2

升级失败后,我们成功回退到4.5.7。

我们之前也从 4.3.1 升级到 4.5.7 LTS。在此升级期间,我们将 SonarQube 数据库从 MySQL 5.5 移动到 5.7.17,然后将 SonarQube 升级到 4.5.7 LTS。本运行两个小时的升级步骤,顺利完成。

感谢您的帮助,

-埃迪

更新 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 插件被弃用的信息,所以我将它从插件文件夹中删除,重新启动 SonarQube,并遇到另一个插件错误(不同的插件)。我遇到了 6 或 7 个这样的错误,并且能够通过删除 Plugins 文件夹中的 .jar 或将其替换为较新的兼容版本来修复它们。

因此,在修复 Java 插件后,我重新启动了 SonarQube,它启动正常!我现在在我的沙箱服务器上 运行 SonarQube 5.6.5 LTS。下一步我将恢复到 4.5.7 LTS 并再次尝试升级,以确保我将来能够成功进行生产升级。