【问题标题】:SonarQube 4.5.7 to 5.6.5 DB Upgrade failureSonarQube 4.5.7 到 5.6.5 数据库升级失败
【发布时间】:2017-07-07 10:15:09
【问题描述】:

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

操作系统: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。升级步骤运行了两个小时并成功完成。

感谢您的帮助,

-艾迪

【问题讨论】:

  • 您似乎遇到了与 FeedFileSources 相关的升级错误的另一个变体。请参阅 herehere。您可以调查链接中提到的表,试图找到一些不寻常的数据并修复它。因为这是 LTS 版本之间的升级,您还应该在 SonarQube Google 群组中搜索答案或发布详细问题。作为最后的手段,您必须从空数据库重新开始。
  • code 也可用
  • @JeroenHeier 谢谢!我能够解决错误并发现更多!我发布了我所做的作为答案。

标签: sonarqube sonarqube-ops


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

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

【讨论】:

  • 一份非常好的报告!在开始升级之前检查所有插件确实是一个好主意。删除已弃用的并更新所有其他文件,还创建一个新文件夹,将新的 SonarQube 版本复制到其中并从旧文件夹中复制插件 jar。升级后还要重新索引您的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2015-07-06
  • 2016-09-15
相关资源
最近更新 更多