一、出现问题
昨天下班了,同事反馈Jira又不能使用了。想都不用想,肯定是磁盘空间不足了,因为已经出现过几次了。之前都是清理一下磁盘空间即可,都不用重启Jira。
今天一上班就开始清理磁盘空间,把一些日志啊,temp目录中的文件啊之类的清理一下,已经有几百兆的空间了,刷新Jira还是不能正常使用,检索不出数据,于是尝试重启。
Jira应用程序实例一般是安装在/opt/atlassian/jira
下,数据保存在/var/atlassian/application-data/jira
下,如果Jira还可以正常运行,具体信息可以在系统
下的系统信息
中查看:
JIRA的控制脚本在/opt/atlassian/jira/bin
下面,启动与关闭有好几个脚本,最直观的就是:start-jira.sh
、startup.sh
、stop-jira.sh
、shutdown.sh
。关于这几个脚本,官方有解释:Understand startup and shutdown scripts in Jira server。
脚本 | 说明 |
---|---|
start-jira.sh | 使用user.sh 中定义的用户启动Jira |
stop-jira.sh | 使用user.sh 中定义的用户关闭Jira |
— | — |
startup.sh | 使用catalina.sh start 中启动Jira |
shutdown.sh | 使用当前用户关闭Jira |
如果没有安装过服务,即不能使用service jira start
和service jira stop
来开关,正确的开关脚本应该是根据/var/atlassian/application-data/jira
的用户和组来决定。
由于很久没维护过Jira了,忘记应该使用哪一组来关闭和启动了。就在这四个脚本中随便使用了一组脚本来关闭和启动,发现要么关闭不了,要么启动不了;要么进程还在,要么记录进程PID的/opt/atlassian/jira/work/catalina.pid
文件还在;要么是启动了,因为目录不能访问,不能正常使用,反正是有问题。后面又遇到使用了两个关闭脚本都关闭不了了,就直接Kill掉进程。后面想起来,是安装过服务的,可以使用service jira start
和service jira stop
来开关,这才是正确的开关方式。
在使用重启大法的过程中,Jira却莫名其妙地进入到了初始化界面(注意,初始化需要许可证),要求选数据库,事感不对,赶紧备份数据,包含数据库和数据目录/var/atlassian/application-data/jira
。停服,备份好后,继续操作,莫名其妙完全进入新的实例了,之前的所有东西都不见了。看了一下/var/atlassian/application-data/jira/dbconfig.xml
目录下的配置,发现使用的是本地文件,不是Mysql。
<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>h2</database-type>
<schema-name>PUBLIC</schema-name>
<jdbc-datasource>
<url>jdbc:h2:file:/var/atlassian/application-data/jira/database/h2db</url>
<driver-class>org.h2.Driver</driver-class>
<username>sa</username>
<password></password>
<pool-min-size>20</pool-min-size>
<pool-max-size>20</pool-max-size>
<pool-max-wait>30000</pool-max-wait>
<min-evictable-idle-time-millis>4000</min-evictable-idle-time-millis>
<time-between-eviction-runs-millis>5000</time-between-eviction-runs-millis>
<pool-max-idle>20</pool-max-idle>
<pool-remove-abandoned>true</pool-remove-abandoned>
<pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
</jdbc-datasource>
</jira-database-config>
二、解决问题
1、修改数据库连接
为了不影响正式数据,在本机虚拟机中尝试安装新Jira,并连接到数据库,得到一个新的Mysql的数据库配置dbconfig.xml
(读者可以不必再新装Jira了,可以直接复制下面的配置进行修改):
<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>mysql</database-type>
<jdbc-datasource>
<url>jdbc:mysql://address=(protocol=tcp)(host=127.0.0.1)(port=3306)/jira?useUnicode=true&characterEncoding=UTF8&sessionVariables=default_storage_engine=InnoDB</url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<username>jira</username>
<password>jira</password>
<pool-min-size>20</pool-min-size>
<pool-max-size>20</pool-max-size>
<pool-max-wait>30000</pool-max-wait>
<validation-query>select 1</validation-query>
<min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
<time-between-eviction-runs-millis>300000</time-between-eviction-runs-millis>
<pool-max-idle>20</pool-max-idle>
<pool-remove-abandoned>true</pool-remove-abandoned>
<pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
<pool-test-on-borrow>false</pool-test-on-borrow>
<pool-test-while-idle>true</pool-test-while-idle>
<validation-query-timeout>3</validation-query-timeout>
</jdbc-datasource>
</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
目录下可能会有比较多的备份文件,可以定期进行清理,以减少磁盘占用空间。