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 패키지 MariaDB 서버가 있는 Debian 11 시스템에서 실행됩니다. 이를 실행하려면 MariaDB 데이터를 대소문자를 구분하지 않는 ext4 파일 시스템으로 이동하고 테이블 이름에서 대소문자를 무시하도록 MariaDB를 구성해야 했습니다(참조:내 게시물은 여기). 그 전에는 Schema "KEYCLOAK" not found
오류 메시지 로 불평을 하고 있었습니다 .
이제 KC 17.0.1을 KC 18로 업그레이드하려고 합니다.이 가이드, 하지만 KC 18을 시작하면이 오류 메시지(줄여서 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가 실제로 스키마와 테이블 이름을 모두 대소문자로 구분하는지 확인하기 위해 제가 시도한 몇 가지 다른 작업은 다음과 같습니다.
# 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는 올바르게 작동하는 것처럼 보이지만(적어도 케이스폴드 관점에서는) KC 18은 시작 시 충돌이 발생하지만 KC 17은 작동합니다. 어떤 단서가 있나요?