KeyCloak 18へのアップグレードが失敗する

KeyCloak 18へのアップグレードが失敗する

私のサーバーでは、MariaDB を使用するように構成された KeyCloak 17.0.1 が問題なく動作しているようです。「どうやら」と書いたのは、今日の時点では、まだ本番環境に導入されていないためです。本番環境では起動しますが、開発サーバー上にあり、実際には開発者が操作するためだけに存在しています。次のコマンドで起動します。

bin/kc.sh -v start --hostname=my.real.hostname --https-certificate-file=/etc/letsencrypt/live/my.real.hostname/cert.pem --https-certificate-key-file=/etc/letsencrypt/live/my.real.hostname/privkey.pem --db-url-host localhost --db-username root --db-password my-real-password --proxy=reencrypt --db-schema=KEYCLOAK

これはDebian 11システムでDebianパッケージのMariaDBサーバー上で実行されています。これを実行するには、大文字と小文字を区別しないext4ファイルシステムにMariaDBデータを移動し、テーブル名の大文字と小文字を無視するようにMariaDBを設定する必要がありました(私の投稿はこちら)。それ以前は、Schema "KEYCLOAK" not foundエラー メッセージが表示されていました。

現在、KC 17.0.1をKC 18にアップグレードしようとしています。このガイドしかし、KC18を始めると、このエラーメッセージ(要するにSchema "KEYCLOAK" not found)。

KC 17.0.1 でも同じエラー メッセージが出力され、MariaDB を大文字と小文字を区別する ext4 ファイルシステムに移動することで問題が解決したため、MariaDB が引き続き大文字と小文字を無視していることを確認したかったのです。そこで、KC エラー メッセージの原因となったのと同じ SQL ステートメントを MariaDB コンソールから手動で実行してみました。

MariaDB [(none)]> CREATE TABLE KEYCLOAK.DATABASECHANGELOGLOCK (ID INT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID));

これは、KC がログに報告したものとは異なるエラー メッセージで応答しました。

ERROR 1050 (42S01): Table 'databasechangeloglock' already exists

つまり、KC 18 は、アップグレード プロセス中に、すでに存在するテーブルを作成しようとしています。KEYCLOAK何らかの理由でスキーマが見つからないため、存在しないと判断して作成しようとしているのかもしれません。しかし、KC 18 は、データベースが見つからない場合、データベースをアップグレードする必要があることをどのようにして認識したのでしょうか。私は、この質問に対する答えを求めているわけではありません。回避策があれば十分です。

MariaDB が実際にスキーマとテーブル名の両方を casefolding していることを確認するために、他に試したことがいくつかあります。

# mysqladmin -u root -p variables | grep lower_case_table_names
| lower_case_table_names                                   | 2   
# mysql
MariaDB [(none)]> create database TESTDB;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> drop database testdb;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> drop database nonexistingschemaname;
ERROR 1008 (HY000): Can't drop database 'nonexistingschemaname'; database doesn't exist

MariaDB [(none)]> create database TESTDB;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use testdb;
Database changed

つまり、MariaDB は正常に動作しているようです (少なくとも casefold の観点からは)。ただし、KC 17 は動作しているのに、KC 18 は起動時にクラッシュします。何か手がかりはありますか?

関連情報