MariaDB, InnoDB und das Problem der zu langen keys

Ich versuche gerade Keycloak testweise in einem Docker-Container zum laufen zu bringen.

Damit dieser Service seine Daten persistent speichern kann, braucht er eine Datenbank. Von Keycloak werden verschiedene Datenbanksysteme unterstüzt. Ich möchte MariaDB, ein Fork von MySQL, nutzen, da ich damit bereits vertraut bin.

Also schnell einen Docker-Container dafür zusammengebastelt und los. Beim Start des Keycloak-Containers versucht dieser sich dann mit der MariaDB zu verbinden, scheiterte aber beim Erzeugen der Tabellen.

Ausgabe:

10:26:07,495 ERROR [org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider] (ServerService Thread Pool -- 72) Change Set META-INF/jpa-changelog-1.0.0.Final.xm
l::1.0.0.Final-KEYCLOAK-5461::sthorger@redhat.com failed.  Error: (conn=3) Specified key was too long; max key length is 767 bytes [Failed SQL: ALTER TABLE keycloak.REALM_SOCIAL_CONFIG ADD P
RIMARY KEY (REALM_ID, NAME)]
10:26:07,505 FATAL [org.keycloak.services] (ServerService Thread Pool -- 72) java.lang.RuntimeException: Failed to update database

Nach einigem Googeln fand ich dann einen Post bei stackexchange, der mir weiterhalf. Dieser bezieht sich allerdings auf eine Windows-Installation, für Linux musste eine andere Datei angepasst werden:

/etc/mysql/mariadb.conf.d/50-server.cnf

...
[embedded]

# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
innodb_file_format = Barracuda
innodb_file_per_table = on
innodb_default_row_format = dynamic
innodb_large_prefix = 1
innodb_file_format_max = Barracuda

# This group is only read by MariaDB-10.1 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.1]
...

Am schnellsten geht das über folgenden Eintrag im Dockerfile:

RUN sed -ie 's|\[mariadb\]|[mariadb]\ninnodb_file_format = Barracuda\ninnodb_file_per_table = on\ninnodb_default_row_format = dynamic\ninnodb_large_prefix = 1\ninnodb_file_format_max = Barracuda|g' /etc/mysql/mariadb.conf.d/50-server.cnf

Nach dieser Anpassung started Keycloak bei mir.

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.