2015-01-08 257 views
0

我想从4.0更新到4.5.1,但该进程总是失败UpdateMeasuresDebtToMinutes。我使用MySQL 5.5.27作为InnoDB作为表引擎的数据库。升级到SonarQube 4.5.1失败UpdateMeasuresDebtToMinutes

基本上这个问题看起来像this problem

的writeTimeout超过后(600秒)有日志

Caused by: java.io.EOFException: Can not read response from server. Expected to read 81 bytes, read 15 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3166) ~[mysql-connector-java-5.1.27.jar:na] 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3676) ~[mysql-connector-java-5.1.27.jar:na] 

添加索引作为链接的问题没有帮助提出了一个例外。

调查进一步我注意到几件事情:

  • 的迁移步骤从表中读取数据,并希望写回同一个表(project_measures
  • project_measures包含超过77万行
  • 的进程始终在249行后挂起
  • 挂起发生在org.sonar.server.migrations.MassUpdate时调用update.addBatch()后0123.强制执行并提交

有没有一种方法来配置数据库连接,让它继续?

+0

当你说失败,不要你在日志中有没有错误? –

+0

是的确定..与链接问题相同,在超过超时之后,会出现java.io.EOFException ..将为上面的文本添加一个片段 –

回答

0

首先,你可以尝试恢复你的数据库到4.0,然后再试一次吗? 然后,你能否给我们提供你正在使用的JDBC url(sonar.jdbc.url)?

谢谢

+0

恢复只会导致同样的问题,一次又一次。 。作为jdbc URL,我尝试了几个具有不同超时设置的版本,但这些只是改变了记录异常的时刻。现在我使用这个设置'sonar.jdbc.url = jdbc:mysql:// localhost:3306/sonar?useUnicode = true&characterEncoding = utf8&rewriteBatchedStatements = true&useConfigs = maxPerformance' –

0

当我需要声纳服务器来运行我终于实现了一个解决方法。

看来我根本无法写入数据库,只要一个大的结果集仍然是打开的(我尝试了第二个表,但与以前相同的问题)。

因此我改变需要读写project_measures表(org.sonar.server.db.migrations.v43.TechnicalDebtMeasuresMigrationorg.sonar.server.db.migrations.v43.RequirementMeasuresMigrationorg.sonar.server.db.migrations.v44.MeasureDataMigration)改变后的数据加载到存储器结构和关闭读取结果集写回毕竟迁移。 这听起来很骇人听起来并且不适用于大数据集,您需要通过数据分页或将所有内容存储到辅助数据存储中。

此外,我发现后面(在546_inverse_rule_key_index.rb)索引需要在rules表上创建,该表大于mysql上的最大密钥长度(2个varchar(255)列的UTF-8大于1000字节。 。),所以我不得不限制密钥长度上太..

正如我所说,这是一个解决办法,所以我不会接受它作为一个答案..

+0

FYI规则索引的最大长度应该为mysql管理。它被截断为最大支持长度。 –