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ützt. 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 versuchte 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.

Neuen Kommentar hinzufügen

Eingeschränktes HTML

  • Erlaubte 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>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.