2015-01-08 49 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管理。它被截斷爲最大支持長度。 –