本人很懒,所以一直没有升级,近来发现 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
,当升级失败的时候还能恢复。接下来就是开始升级之旅吧。
- 首先升级
2.3.0
- 上传 war 至服务器
- 停止 Tomcat
- 解压 `jar -xvf
- 复制配置文件
- 启动 Tomcat
- 升级
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
```sql
update b3_solo_option set optionValue='2.4.0' where oId='version';
```
- 确认以上步骤无误之后,删表跑路哈,其实是该表一废弃。
delete from b3_solo_statistic
- 启动 Tomcat
- 继续升级
亲测,必须要按照版本号一次次升级,不能直接升级到最新版本,不然不知道有多少坑等着你跳。
最后从坑里出不来了,现在出现了一个错误
[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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于