本人很懒,所以一直没有升级,近来发现 solo 已经升级到 2.9.2 了,然后看了下历史版本列表,都有 1 年多了。然后看了下每个版本 Features 和 Bugs,发现还是值得更新的,但是一路下来还是挺麻烦的。

刚开始直接从下载了solo-2.9.2.war进行升级,然后就很悲剧的报错。

[ERROR]-[2018-08-17 03:00:28]-[org.b3log.solo.service.UpgradeService:154]: Attempt to skip more than one version to upgrade. Expected: 2.9.1; Actually: 1.7.0

日志提示错误,没办法只能去论坛搜索下解决方案了,结果表示比较麻烦。

我的运行模式放在Tomcat里面运行的,所以首先需要数据备份,主要是如下三个配置文件备份。

  • latke.properties
  • local.properties
  • solo.properties

其次备份当前项目,zip -r solo-2.2.0.zip solo,当升级失败的时候还能恢复。接下来就是开始升级之旅吧。

  1. 首先升级2.3.0

    • 上传 war 至服务器
    • 停止 Tomcat
    • 解压 `jar -xvf
    • 复制配置文件
    • 启动 Tomcat
  2. 升级2.4.0
    这一版本是大更新,主要涉及到数据库的更新,这里列举下 SQL,方便没有升级的人。

    • 停止 Tomcat

    • 上传并且解压 war 包

    • 复制配置文件

    • 通过 SQL 语句desc b3_solo_page检查是否在pageIcon字段

    • 如果没有则执行 SQL 语句alter table b3_solo_page add pageIcon varchar(255) default ''

    • 通过 SQL 语句select * from b3_solo_option where oId like 'stat%'查询结果为空则执行如下 SQL 语句:

      insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogArticleCount',statisticBlogArticleCount,'statistic' from b3_solo_statistic;
      insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogCommentCount',statisticBlogCommentCount,'statistic' from b3_solo_statistic;
      insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogViewCount', statisticBlogViewCount,'statistic' from b3_solo_statistic;
      insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticPublishedBlogArticleCount',statisticPublishedBlogArticleCount,'statistic' from b3_solo_statistic;
      insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticPublishedBlogCommentCount',statisticPublishedBlogCommentCount,'statistic' from b3_solo_statistic;
      
    • 升级 'version`,正好解决了文章开头的错误。通过如下 SQL 判断是否真的需要升级

      select * from b3_solo_option where oId='version';

      如果需要升级则执行如下 SQL

      update b3_solo_option set optionValue='2.4.0' where oId='version';
    • 确认以上步骤无误之后,删表跑路哈,其实是该表一废弃。delete from b3_solo_statistic

    • 启动 Tomcat

  3. 继续升级

亲测,必须要按照版本号一次次升级,不能直接升级到最新版本,不然不知道有多少坑等着你跳。


最后从坑里出不来了,现在出现了一个错误

[ERROR]-[2018-08-17 06:04:23]-[org.b3log.latke.repository.jdbc.JdbcRepository:776]: Count failed
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'solo.b3_solo_category' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
        at com.mysql.jdbc.Util.getInstance(Util.java:408)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)

@88250 能提供这个表的 SQL 以及相关的升级 SQL 语句么。

通过查看源码,已经找到了错误对应的 SQL。

CREATE TABLE b3_solo_category(
    `oId` varchar(19) NOT NULL,
    `categoryTitle` varchar(64) NOT NULL,
    `categoryURI` varchar(32) NOT NULL,
    `categoryDescription` text NOT NULL,
    `categoryOrder` int(11) NOT NULL,
    `categoryTagCnt` int(11) NOT NULL,
    PRIMARY KEY (`oId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `b3_solo_category_tag` (
    `oId` varchar(19) NOT NULL,
    `category_oId` varchar(19) NOT NULL,
    `tag_oId` varchar(19) NOT NULL,
    PRIMARY KEY (`oId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

https://gitee.com/dl88250/solo/blob/master/src/main/java/org/b3log/solo/service/UpgradeService.java

感谢    关注    收藏    赞同    反对    举报    分享