簡體   English   中英

keycloak 與 mysql-innodb-cluster 的獨立集成

[英]keycloak standalone integration with mysql-innodb-cluster

試圖讓 keycloak 與 mysql-innodb-cluster 一起工作。 我已經按照文檔配置了 keycloak Standalone.xml。

這是數據源

            <datasource jndi-name="java:/jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true">
                <connection-url>jdbc:mysql://19.57.1.115:6446/keycloak?useSSL=false&amp;characterEncoding=UTF-8</connection-url>
                <driver>mysql</driver>
                <pool>
                    <min-pool-size>5</min-pool-size>
                    <max-pool-size>15</max-pool-size>
                </pool>
                <security>
                    <user-name>key</user-name>
                    <password>abababab</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                    <validate-on-match>true</validate-on-match>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
                </validation>
            </datasource>

這是驅動程序

            <drivers>
                <driver name="mysql" module="com.mysql">
                    <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
                </driver>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
            </drivers>

我還添加了 module.xml 用於打包 mysql jdbc 驅動程序(我正在使用最新版本的 mysql-connector-java-8.0.21.jar)

我運行 keycloak 時遇到的錯誤是

10:45:23,155 INFO  [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool -- 66) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml
10:45:24,088 ERROR [org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider] (ServerService Thread Pool -- 66) Change Set META-INF/jpa-changelog- 
1.0.0.Final.xml::1.0.0.Final-KEYCLOAK-5461::sthorger@redhat.com failed.  Error: Table 'APPLICATION_DEFAULT_ROLES' already exists [Failed SQL: CREATE TABLE keycloak.APPLICATION_DEFAULT_ROLES (APPLICATION_ID VARCHAR(36) NOT NULL, ROLE_ID VARCHAR(36) NOT NULL)]
10:45:24,414 FATAL [org.keycloak.services] (ServerService Thread Pool -- 66) java.lang.RuntimeException: Failed to update database
10:45:24,446 INFO  [org.jboss.as.server] (Thread-2) WFLYSRV0220: Server shutdown has been requested via an OS signal

在這方面的任何幫助都會非常有幫助。

我認為您看到的錯誤“錯誤:表'APPLICATION_DEFAULT_ROLES'已經存在”不是根本原因。 Keycloak 使用Liquibase進行數據庫初始化和升級管理。 Liquibase 似乎不支持 MySQL innodb 集群,因為它創建了一個沒有主鍵的表“DATABASECHANGELOG”。 如果您檢查 MySLQ 日志,您可能會在 keycloak 創建數據庫表時第一次啟動時看到以下日志消息:

[ERROR] Plugin group_replication reported: 'Table DATABASECHANGELOG does not have any PRIMARY KEY. This is not compatible with Group Replication' 

該表現在存在於您的主數據庫上,但尚未復制到其他復制組成員。 如果您再次啟動 Keycloak,您將收到錯誤消息“表 'APPLICATION_DEFAULT_ROLES' 已存在”。

如果您從空數據庫模式開始,手動創建帶有主鍵的 DATABASECHANGELOG 表,然后讓 Keycloak(實際上是 Liquibase)創建表的 rest,則可以解決此問題。

您可以使用以下語句來創建表:

CREATE TABLE `DATABASECHANGELOG` (
  `ID` varchar(255) NOT NULL,
  `AUTHOR` varchar(255) NOT NULL,
  `FILENAME` varchar(255) NOT NULL,
  `DATEEXECUTED` datetime NOT NULL,
  `ORDEREXECUTED` int(11) NOT NULL,
  `EXECTYPE` varchar(10) NOT NULL,
  `MD5SUM` varchar(35) DEFAULT NULL,
  `DESCRIPTION` varchar(255) DEFAULT NULL,
  `COMMENTS` varchar(255) DEFAULT NULL,
  `TAG` varchar(255) DEFAULT NULL,
  `LIQUIBASE` varchar(20) DEFAULT NULL,
  `CONTEXTS` varchar(255) DEFAULT NULL,
  `LABELS` varchar(255) DEFAULT NULL,
  `DEPLOYMENT_ID` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`ID`,`AUTHOR`,`FILENAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM