Hey all. I’m struggling to figure out why my Keycloak installation isn’t working with MySQL when using the keycloak user but does work if I manually launch it using sudo. Please see details below. I’d be very grateful if anyone has any pointers.
Group and user created with this when installing Keycloak:
sudo groupadd -r keycloak
sudo useradd -m -d /var/lib/keycloak -s /sbin/nologin -r -g keycloak keycloak
And then the ownership of the Keycloak folder was changed and the service enabled:
sudo chown keycloak: -R /opt/keycloak
Then MySQL was installed, a database created and if I use
cd /opt/keycloak/current/bin
sudo ./standalone.sh -b 0.0.0.0
the server starts without issue and I can log into the admin console.
But if I use:
sudo systemctl start keycloak
I get this error. I feel like it’s a permissions thing on the keycloak user:
WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Timer-2) IJ000621: Destroying connection that could not be validated: org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@7fe854b0[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@38cec5e6 connection handles=0 lastReturned=1616418652723 lastValidated=1616413701246 lastCheckedOut=1616418652707 trackByTx=false pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@3862b427 mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool@68213756[pool=KeycloakDS] xaResource=LocalXAResourceImpl@74fa9633[connectionListener=7fe854b0 connectionManager=6fc765a0 warned=false currentXid=null productName=MySQL productVersion=8.0.23-0ubuntu0.20.04.1 jndiName=java:jboss/datasources/KeycloakDS] txSync=null] 2021-03-22 13:21:50,382 INFO [org.jboss.as.ejb3] (Thread-2) WFLYEJB0493: EJB subsystem suspension complete 2021-03-22 13:21:51,013 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Timer-2) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:345) at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:352) at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:287) at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1322) at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:499) at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getTransactionNewConnection(AbstractPool.java:714) at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:613) at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624) at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:440) at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789) at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:151) at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64) at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:50) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:151) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2082) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2012) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1990) at org.hibernate.loader.Loader.scroll(Loader.java:2863) at org.hibernate.loader.hql.QueryLoader.scroll(QueryLoader.java:574) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.scroll(QueryTranslatorImpl.java:447) at org.hibernate.engine.query.spi.HQLQueryPlan.performScroll(HQLQueryPlan.java:354) at org.hibernate.internal.SessionImpl.scroll(SessionImpl.java:1658) at org.hibernate.query.internal.AbstractProducedQuery.doScroll(AbstractProducedQuery.java:1537) at org.hibernate.query.internal.AbstractProducedQuery.scroll(AbstractProducedQuery.java:1523) at org.hibernate.query.internal.AbstractProducedQuery.stream(AbstractProducedQuery.java:1547) at org.hibernate.query.Query.getResultStream(Query.java:1107) at org.keycloak.models.jpa.JpaRealmProvider.getRealms(JpaRealmProvider.java:130) at org.keycloak.models.jpa.JpaRealmProvider.getRealmsStream(JpaRealmProvider.java:126) at org.keycloak.models.cache.infinispan.RealmCacheSession.getRealmsStream(RealmCacheSession.java:478) at org.keycloak.services.scheduled.ClearExpiredEvents.run(ClearExpiredEvents.java:33) at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner$1.call(ClusterAwareScheduledTaskRunner.java:56) at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner$1.call(ClusterAwareScheduledTaskRunner.java:52) at org.keycloak.cluster.infinispan.InfinispanClusterProvider.executeIfNotExecuted(InfinispanClusterProvider.java:78) at org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner.runTask(ClusterAwareScheduledTaskRunner.java:52) at org.keycloak.services.scheduled.ScheduledTaskRunner.run(ScheduledTaskRunner.java:45) at org.keycloak.timer.basic.BasicTimerProvider$1.run(BasicTimerProvider.java:51) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure