一、出现问题

昨天下班了,同事反馈Jira又不能使用了。想都不用想,肯定是磁盘空间不足了,因为已经出现过几次了。之前都是清理一下磁盘空间即可,都不用重启Jira。

今天一上班就开始清理磁盘空间,把一些日志啊,temp目录中的文件啊之类的清理一下,已经有几百兆的空间了,刷新Jira还是不能正常使用,检索不出数据,于是尝试重启。

Jira应用程序实例一般是安装在/opt/atlassian/jira下,数据保存在/var/atlassian/application-data/jira下,如果Jira还可以正常运行,具体信息可以在系统下的系统信息中查看:

JIRA的控制脚本在/opt/atlassian/jira/bin下面,启动与关闭有好几个脚本,最直观的就是:start-jira.shstartup.shstop-jira.shshutdown.sh。关于这几个脚本,官方有解释: Understand startup and shutdown scripts in Jira server。 脚本说明start-jira.sh使用user.sh中定义的用户启动Jirastop-jira.sh使用user.sh中定义的用户关闭Jira——startup.sh使用catalina.sh start中启动Jirashutdown.sh使用当前用户关闭Jira

如果没有安装过服务,即不能使用service jira startservice jira stop来开关,正确的开关脚本应该是根据/var/atlassian/application-data/jira的用户和组来决定。

由于很久没维护过Jira了,忘记应该使用哪一组来关闭和启动了。就在这四个脚本中随便使用了一组脚本来关闭和启动,发现要么关闭不了,要么启动不了;要么进程还在,要么记录进程PID的/opt/atlassian/jira/work/catalina.pid文件还在;要么是启动了,因为目录不能访问,不能正常使用,反正是有问题。后面又遇到使用了两个关闭脚本都关闭不了了,就直接Kill掉进程。后面想起来,是安装过服务的,可以使用service jira startservice jira stop来开关,这才是正确的开关方式。

在使用重启大法的过程中,Jira却莫名其妙地进入到了初始化界面(注意,初始化需要许可证),要求选数据库,事感不对,赶紧备份数据,包含数据库和数据目录/var/atlassian/application-data/jira。停服,备份好后,继续操作,莫名其妙完全进入新的实例了,之前的所有东西都不见了。看了一下/var/atlassian/application-data/jira/dbconfig.xml目录下的配置,发现使用的是本地文件,不是Mysql。

 1<?xml version="1.0" encoding="UTF-8"?>
 2
 3<jira-database-config>
 4  <name>defaultDS</name>
 5  <delegator-name>default</delegator-name>
 6  <database-type>h2</database-type>
 7  <schema-name>PUBLIC</schema-name>
 8  <jdbc-datasource>
 9    <url>jdbc:h2:file:/var/atlassian/application-data/jira/database/h2db</url>
10    <driver-class>org.h2.Driver</driver-class>
11    <username>sa</username>
12    <password></password>
13    <pool-min-size>20</pool-min-size>
14    <pool-max-size>20</pool-max-size>
15    <pool-max-wait>30000</pool-max-wait>
16    <min-evictable-idle-time-millis>4000</min-evictable-idle-time-millis>
17    <time-between-eviction-runs-millis>5000</time-between-eviction-runs-millis>
18    <pool-max-idle>20</pool-max-idle>
19    <pool-remove-abandoned>true</pool-remove-abandoned>
20    <pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
21  </jdbc-datasource>
22</jira-database-config>

二、解决问题

1、修改数据库连接

为了不影响正式数据,在本机虚拟机中尝试安装新Jira,并连接到数据库,得到一个新的Mysql的数据库配置dbconfig.xml(读者可以不必再新装Jira了,可以直接复制下面的配置进行修改):

 1<?xml version="1.0" encoding="UTF-8"?>
 2
 3<jira-database-config>
 4  <name>defaultDS</name>
 5  <delegator-name>default</delegator-name>
 6  <database-type>mysql</database-type>
 7  <jdbc-datasource>
 8    <url>jdbc:mysql://address=(protocol=tcp)(host=127.0.0.1)(port=3306)/jira?useUnicode=true&amp;characterEncoding=UTF8&amp;sessionVariables=default_storage_engine=InnoDB</url>
 9    <driver-class>com.mysql.jdbc.Driver</driver-class>
10    <username>jira</username>
11    <password>jira</password>
12    <pool-min-size>20</pool-min-size>
13    <pool-max-size>20</pool-max-size>
14    <pool-max-wait>30000</pool-max-wait>
15    <validation-query>select 1</validation-query>
16    <min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
17    <time-between-eviction-runs-millis>300000</time-between-eviction-runs-millis>
18    <pool-max-idle>20</pool-max-idle>
19    <pool-remove-abandoned>true</pool-remove-abandoned>
20    <pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
21    <pool-test-on-borrow>false</pool-test-on-borrow>
22    <pool-test-while-idle>true</pool-test-while-idle>
23    <validation-query-timeout>3</validation-query-timeout>
24  </jdbc-datasource>
25</jira-database-config>

将上面的配置中连接的数据库名、IP、端口、账号、密码修改为自己所需要的,把它保存到/var/atlassian/application-data/jira/dbconfig.xml,使用service jira start启动Jira。由于前面已经初始化过了,可以进入系统,所以这里没有再进入初始化。

2、恢复系统

使用了之前的数据库连接后, 就可以使用之前的账号密码登录Jira了。然后在管理页面的系统中使用恢复系统功能:

从页面中可以看到,需要把要恢复的文件存放在/var/atlassian/application-data/jira/import目录下:

由于Jira实例还是原来的位置,所以原来的数据都还在,特别是目录/var/atlassian/application-data/jira/data保存了所有附件及头像,目录/var/atlassian/application-data/jira/export下保存了Jira自动备份的文件,找到最新的文件,复制到/var/atlassian/application-data/jira/import目录下,然后在上图文件名中填写正确的文件名,比如2023-Jun-6--2000.zip,表示是2023年6月6号20点备份的。然后复原,等待完成,重新登录即可。

又可以愉快的使用Jira了。

Btw:由于Jira会自动备份,在/var/atlassian/application-data/jira/export目录下可能会有比较多的备份文件,可以定期进行清理,以减少磁盘占用空间。