confluence 4.2 升级至 6.10.x 记录

安装目录:/opt/atlassian/confluence

数据目录:/opt/confluencedata

数据库:confluence_smc

具体升级过程如下:

一、修改 confluence 服务应用程序目录

由于公司 confluence 服务 4.2 版本安装时,将应用程序目录移动至 webapps 目录下,导致升级时会无法识别到安装路径,所以需要修改应用程序路径,步骤如下:

首先停止 confluence 服务,将 webapps 目录下的 wiki 目录移动到安装目录的根目录下,并重命名为 confluence:

mv /opt/atlassian/confluence/webapps/wiki /opt/atlassian/confluence/confluence

修改 server.xml 文件,将 docBase 修改为如下内容:

<Context path="" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">

修改完成后重新启动 confluence 服务验证访问,此时直接输入 IP:端口 即可

/opt/atlassian/confluence/bin/startup.sh 二、修改数据库配置 1. 修改字符集和排序

由于公司当前使用的 confluence 服务的数据库字符集为 utf8,并且未指定排序方式。为了保证后面跨版本升级时新的数据库结构能够正常同步,首先需要对数据库中的默认字符集和排序方式进行修改,修改步骤如下:

由于涉及修改的数据量比较大,首先设置忽略外键约束,避免修改时报错:

SET FOREIGN_KEY_CHECKS=0;

修改数据库默认字符集和排序,命令如下:

ALTER DATABASE confluence_smc CHARACTER SET utf8 COLLATE utf8_bin;

修改数据库中所有表的字符集和排序,命令如下:

SELECT CONCAT('ALTER TABLE `', table_name, '` CHARACTER SET utf8 COLLATE utf8_bin;') FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C WHERE C.collation_name = T.table_collation AND T.table_schema = 'confluence_smc' AND ( C.CHARACTER_SET_NAME != 'utf8' OR C.COLLATION_NAME != 'utf8_bin' );

上面的命令执行完成后会生成修改所有表的 sql 语句,将这些 sql 复制到数据库内执行即可完成修改

修改所有数据类型为 varchar 字段的字符集和排序:

SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET utf8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'confluence_smc' AND DATA_TYPE = 'varchar' AND ( CHARACTER_SET_NAME != 'utf8' OR COLLATION_NAME != 'utf8_bin' );

上面的命令执行完成后会生成修改所有相关字段的 sql 语句,将这些 sql 复制到数据库内执行即可完成修改

修改所有数据类型不是 varchar 字段字符集和排序:

SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, ' CHARACTER SET utf8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'confluence_smc' AND DATA_TYPE != 'varchar' AND ( CHARACTER_SET_NAME != 'utf8' OR COLLATION_NAME != 'utf8_bin' );

上面的命令执行完成后会生成修改所有相关字段的 sql 语句,将这些 sql 复制到数据库内执行即可完成修改

设置开启外键约束:

SET FOREIGN_KEY_CHECKS=1; 2. 修改数据库配置文件

检查数据库的配置文件,在 [mysqld] 下面添加如下配置项:

character-set-server=utf8 collation-server=utf8_bin default-storage-engine=INNODB max_allowed_packet=256M max_connections=1000 innodb_log_file_size=2GB transaction-isolation=READ-COMMITTED binlog_format=row

如果当前数据库中只有 confluence 一个业务,可以参考如上配置,如果有其他业务共用,为了避免影响其他业务,可以考虑将字符集和引擎设置忽略(可在程序连接数据库时在 jdbc 连接中指定)。

如果数据库配置文件中有如下配置,需要将其删除,否则会引发报错。如果还开启了其他的 sql_mode ,只需要删除 NO_AUTO_VALUE_ON_ZERO 即可:

sql_mode = NO_AUTO_VALUE_ON_ZERO

如果开启了 NO_AUTO_VALUE_ON_ZERO 则会引发如下报错内容:

2020-08-14 09:26:06,520 ERROR [http-8090-4] [atlassian.event.internal.EventPublisherImpl] invokeListeners There was an exception thrown trying to dispatch event 'com.atlassian.confluence.event.events.content.comment.CommentCreateEvent[source=com.atlassian.confluence.pages.DefaultCommentManager@4b077b33]' from the invoker 'com.atlassian.event.internal.SingleParameterMethodListenerInvoker@25695aa2'. -- url: /rest/tinymce/1/content/524379/comment | userName: admin| referer: <confluence-url>/pages/viewpage.action?pageId=524379 java.lang.RuntimeException: java.lang.reflect.UndeclaredThrowableException at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:50) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:60) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:28) ..... Caused by: java.lang.reflect.UndeclaredThrowableException at $Proxy943.createOrUpdate(Unknown Source) at sun.reflect.GeneratedMethodAccessor1033.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ..... Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor1033.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.atlassian.mywork.client.service.ServiceSelectorImpl$3.invoke(ServiceSelectorImpl.java:144) ... 235 more Caused by: java.lang.NullPointerException at net.java.ao.EntityManager$CacheKey.hashCode(EntityManager.java:1070) at java.util.HashMap.getEntry(Unknown Source) at java.util.LinkedHashMap.get(Unknown Source) at net.java.ao.EntityManager.getFromCache(EntityManager.java:247) at net.java.ao.EntityManager.peer(EntityManager.java:234) at net.java.ao.EntityManager.peer(EntityManager.java:299) at net.java.ao.EntityManager.create(EntityManager.java:411) ......

配置完成后重启数据库服务。

3. 修改 confluence 数据库配置文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyysps.html