问题描述

在安装或升级Jira到最新的版本时,出现MySql 数据库无法连接的情况,日志报错如下

JIRA-Bootstrap ERROR [c.a.config.bootstrap.DefaultAtlassianBootstrapManager] Could not successfully test your d
atabase:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 81 milliseconds ago. The last packet sent successfully to the server was 76 milliseconds ago.

...

Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186)
CODE

分析

因为安全的问题, 新版本的JDK 不再支持 TLSv1.0 和  TLS v1.1 版本的TSL ,  但MySQL的数据库还支持,我们可以通过以下方式查看MsSQL 支持的TLS版本, 登录到MySQL,执行以下查询

SHOW GLOBAL VARIABLES LIKE 'tls_version';
CODE


解决办法

有两种解决办法,使用TLSv1.2 或者不使用 SSL连接

指定使用TLSv1.2

配置Jira Home 目录下的 dbconfig.xml, 在数据库连接符后面加上  &amp;enabledTLSProtocols=TLSv1.2


jdbc:mysql://<host>:<port>/<dbname>?...&amp;enabledTLSProtocols=TLSv1.2
CODE

&amp; & 的转义

然后重启Jira

指定禁用SSL

配置Jira Home 目录下的 dbconfig.xml, 在数据库连接符后面加上  &amp;useSSL=false

jdbc:mysql://<host>:<port>/<dbname>?...&amp;useSSL=false
CODE

然后重启Jira