2017-02-17 72 views
0

我試圖將我們的SonarQube實例從4.5.7 LTS升級到5.6.5 LTS。我遵循提供的SonarQube升級文檔。瀏覽到[sonarserver]:9000/setup並運行數據庫升級。升級跑了2小時多一點,回來與此消息:SonarQube 4.5.7到5.6.5數據庫升級失敗

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

+0

看起來您碰到與FeedFileSources相關的升級錯誤的另一個變體。請參閱[這裏](https://jira.sonarsource.com/browse/SONAR-7997)和[這裏](https://groups.google.com/forum/#!topic/sonarqube/hOkvq3jz6kI)。您可以調查鏈接中提到的表格,試圖找到不尋常的數據並修復它。由於這是LTS版本之間的升級,您還應該在SonarQube Google小組中搜索答案或發佈詳細問題。作爲最後的手段,你必須重新開始一個空的數據庫。 –

+0

[code](https://jar-download.com/explore-java-source-code-detail.php?file=./javaSource/org.sonarsource.sonarqube/sonar-db/5.6/org/sonar/ db/version/v50/FeedFileSources.java&key = c958548c567e504e88ff12dee402c385)也可用 –

+0

@JeroenHeier謝謝!我能夠解決這個錯誤,並找到了更多!我發佈了我做的答案。 – EddieB

回答

1

UPDATE 17年2月21日

我站起來一個測試實例,該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,並且升級超過了錯誤!

不幸的是,DB升級跑了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,跑了DB再次升級,並通過了錯誤。升級繼續運行,我收到另一個錯誤:

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個這些錯誤,並能夠通過刪除或替換插件文件夾中的.jar與更新的兼容版本來解決它們。

所以修復Java插件後,我重新啓動SonarQube,它啓動正常!我現在在我的沙箱服務器上運行SonarQube 5.6.5 LTS。下一步將恢復到4.5.7 LTS,並再次嘗試升級,以確保將來能夠成功進行生產升級。

+0

非常好的報告!在開始升級以檢查所有插件之前,確實是一個好主意。刪除棄用並更新所有其他文件,創建一個新文件夾,將新SonarQube版本複製到其中,並從舊文件夾中複製插件罐。升級後還要重新索引數據庫。 –