Jira是一款广泛使用的项目管理和问题跟踪软件。在进行版本升级时,需要注意以下问题以确保升级过程的顺利进行:
- 备份:在升级之前,务必要对Jira实例进行完整备份,包括应用程序数据、附件、配置文件和数据库。这样在升级过程中如果出现问题,可以快速恢复。
- 兼容性检查:检查新版本与现有插件、自定义代码和其他集成系统的兼容性。不兼容的插件或集成可能会在升级后出现问题。
- 系统要求:确保服务器满足新版本Jira的系统要求,包括操作系统、Java版本、内存和磁盘空间等。
- 停机计划:升级可能需要一段时间的停机,应该提前通知用户,并选择一个对业务影响最小的时间段进行。
- 测试环境:在升级生产环境之前,最好在测试环境中先进行升级,以检查可能出现的任何问题。
- 升级路径:了解并遵循Atlassian官方推荐的升级路径。有些版本可能需要先升级到某个中间版本,然后才能升级到目标版本。
- 阅读升级说明:仔细阅读Atlassian提供的升级说明,了解升级过程中的特殊注意事项和步骤。
- 维护模式:在升级过程中,可以将Jira置于维护模式,以防止用户在升级过程中进行操作。
- 监控和日志:在升级过程中监控系统资源使用情况,并检查日志文件以识别任何潜在的问题。
- 用户培训:如果新版本有较大的界面或功能变化,可能需要对用户进行培训,以便他们能够有效地使用新版本。
- 数据迁移:如果涉及到数据结构的变化,确保按照官方指南进行数据迁移。
- 升级后检查:升级完成后,进行全面的功能测试,确保所有功能正常工作。
- 备份恢复测试:在升级后,建议测试之前做的备份是否可以成功恢复,以确保备份的有效性。
- 许可证检查:确保你有适用于新版本的Jira许可证。
遵循上述步骤可以帮助你减少升级过程中可能出现的问题,并确保Jira服务的连续性和稳定性。
以下是jira从v7.6.2升级到v8.20.30中遇到的报错问题:
2024-08-19 09:34:36,434+0800 JIRA-Bootstrap ERROR [c.a.config.bootstrap.DefaultAtlassianBootstrapManager] Could not successfully test your database:
org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: Unable to read the page at position -622684770890831991 [1.4.200/6]" [50000-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:505)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:194)
at org.h2.message.DbException.convert(DbException.java:347)
at org.h2.engine.Database.openDatabase(Database.java:333)
at org.h2.engine.Database.<init>(Database.java:301)
at org.h2.engine.Engine.openSession(Engine.java:74)
at org.h2.engine.Engine.openSession(Engine.java:192)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171)
at org.h2.engine.Engine.createSession(Engine.java:166)
at org.h2.engine.Engine.createSession(Engine.java:29)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152)
at org.h2.Driver.connect(Driver.java:69)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at com.atlassian.config.bootstrap.DefaultAtlassianBootstrapManager.getTestDatabaseConnection(DefaultAtlassianBootstrapManager.java:347)
at com.atlassian.jira.config.database.JdbcDatasource.getConnection(JdbcDatasource.java:225)
at com.atlassian.jira.config.database.DatabaseConfig.testConnection(DatabaseConfig.java:89)
at com.atlassian.jira.health.checks.DbConfigurationAndConnectionCheck.doPerform(DbConfigurationAndConnectionCheck.java:60)
at com.atlassian.jira.health.HealthCheckTemplate.perform(HealthCheckTemplate.java:23)
at com.atlassian.jira.health.DefaultHealthCheckExecutor.runCheck(DefaultHealthCheckExecutor.java:76)
at com.atlassian.jira.health.DefaultHealthCheckExecutor.lambda$applyAndCollectExceptions$1(DefaultHealthCheckExecutor.java:55)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at com.atlassian.jira.health.DefaultHealthCheckExecutor.applyAndCollectExceptions(DefaultHealthCheckExecutor.java:55)
at com.atlassian.jira.health.DefaultHealthCheckExecutor.performHealthChecks(DefaultHealthCheckExecutor.java:44)
at com.atlassian.jira.health.HealthChecks.executeChecksAndRecordResults(HealthChecks.java:164)
at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:154)
at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:66)
at com.atlassian.jira.startup.BootstrapContainerLauncher.start(BootstrapContainerLauncher.java:48)
at com.atlassian.jira.startup.DefaultJiraLauncher.preDbLaunch(DefaultJiraLauncher.java:115)
at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:101)
at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31)
at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:100)
at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:154)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Unable to read the page at position -622684770890831991 [1.4.200/6]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950)
at org.h2.mvstore.MVStore.readPage(MVStore.java:2213)
at org.h2.mvstore.MVMap.readPage(MVMap.java:672)
at org.h2.mvstore.MVMap.readOrCreateRootPage(MVMap.java:688)
at org.h2.mvstore.MVMap.setRootPos(MVMap.java:682)
at org.h2.mvstore.MVStore.openMap(MVStore.java:535)
at org.h2.mvstore.MVStore.openMap(MVStore.java:516)
at org.h2.mvstore.MVStore.removeMap(MVStore.java:2742)
at org.h2.engine.Database.handleUpgradeIssues(Database.java:866)
at org.h2.engine.Database.open(Database.java:742)
at org.h2.engine.Database.openDatabase(Database.java:307)
... 41 more
Caused by: java.lang.IllegalStateException: Unsupported type 17 [1.4.200/3]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950)
at org.h2.mvstore.type.ObjectDataType.newType(ObjectDataType.java:165)
at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:229)
at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:114)
at org.h2.mvstore.Page.read(Page.java:605)
at org.h2.mvstore.MVStore.readPage(MVStore.java:2211)
... 51 more
2024-08-19 09:34:36,469+0800 JIRA-Bootstrap ERROR [c.a.jira.health.HealthChecks] JIRA couldn't connect to your database
2024-08-19 09:34:36,469+0800 JIRA-Bootstrap ERROR [c.a.jira.health.HealthChecks] JIRA failed to establish a connection to your database.
This could be because:
- Your database isn't running
- The configuration of your dbconfig.xml file is incorrect (user, password, or database URL etc.)
- There is a network issue between JIRA and your database (e.g. firewall, database doesn't allow remote access etc.)
There are several other solutions you can try, review our documentation and see what works for you.
使用原来的驱动包h2-1.4.185.jar还是报错,
对比升级前后数据库文件的md5值后发现,/var/atlassian/application-data/jira/database/h2db.mv.db这个文件在升级后发生了变化,恢复了原来的文件后,使用原来的驱动包,启动jira后数据库可以正常连接。
但是通过这种方式升级,需要大量时间花费在重建索引上。
如图:

10:34开始升级,到发文时间14:37分进度才完成15%,数据文件一共才40多GB。
耐心等吧…
后续:
截至发文,通过对比发现数据库文件升级前后的差异如下:

上面的为升级后的,注意ascii中version信息为:3de5541
下面的为升级前的,version为:3de5538
说明一个事,使用bin包升级时,会操作数据库文件,并更换其版本。
同时注意到使用v8.20.30这个版本升级后,日志中会报如下错误:
General error: "java.lang.IllegalStateException: Unable to read the page at position -606540641660196983 [1.4.200/6]" [50000-200] HY000/50000 (Help)
查看H2DB的驱动包版本为1.4.200,通过StackOverflow搜索了解到使用1.4.199这个版本可以解决这个问题,更换驱动包后,启动报错问题解决,并且重建索引只用了120s左右,之前的那种操作方法用了2天时间重建索引,汗!!!
最后修改时间:2024-08-22 16:27:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




