Confluence fails to start and throws 'MySQL session isolation level 'REPEATABLE-READ' is no longer supported' error
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Problem
Confluence does not start when connecting to MySQL. The following page appears:
Cause
MySQL is running with the wrong transaction isolation level. With 3.5, Confluence enforced a global transaction isolation level of READ-COMMITTED. As of 3.5.6, this property can be set either globally or on a session level. New installations will automatically have the correct session isolation level set, but upgraded installations will need to set it manually.
Resolution
There are several options for fixing this:
Set the global transaction isolation level to READ-COMMITTED. You can do this by configuring your MySQL server's settings by editing MySQL's
my.cnf
file (often namedmy.ini
on Windows operating systems). Locate the[mysqld]
section in the file and add/modify the following parameter:[mysqld] ... transaction-isolation=READ-COMMITTED ...
(Confluence 3.5.6 onwards) Set the session isolation level in Confluence. For existing installations of Confluence, in the top level of your Confluence home directory, find the
confluence.cfg.xml
file and locate the<properties>
section. Add the following parameter:<properties> ... <property name="hibernate.connection.isolation">2</property> ... <properties>
For new installations of Confluence or if the Isolation level issue comes after Upgrade , configure the JDBC string as follows to set the sessionVariable to enforce READ-COMMITTED:
For MySQL 5.x?sessionVariables=tx_isolation='READ-COMMITTED' e.g. jdbc:mysql://127.0.0.1:3306/confdb?sessionVariables=tx_isolation='READ-COMMITTED'
For MySQL 8.x?sessionVariables=transaction_isolation='READ-COMMITTED' e.g. jdbc:mysql://127.0.0.1:3306/confdb?sessionVariables=transaction_isolation='READ-COMMITTED'