👉 오류 내용(MariaDB 사용)
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
alter table chat_user
add constraint FK67fgnu7l9ghfnf79aj7p316rx
foreign key (chat_room_id)
references chat_room (id)" via JDBC [(conn=59) Table '[DB 이름].chat_user' doesn't exist]
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:92) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:235) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:219) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createForeignKeys(SchemaCreatorImpl.java:303) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:250) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:254) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:143) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
Caused by: java.sql.SQLSyntaxErrorException: (conn=69) Table doesn't exist
👉 오류 상황 및 조사
- 스프링 부트 프로젝트 빌드 시에 위와 같은 오류가 거듭 발생 → 서비스 실행은 되는 상황
- 해당 테이블을 사용하는 페이지에 들어가면 White Label 페이지로 뜸
- 해당 페이지에서는 채팅방이 생성되며 방장이 채팅 유저로 등록되어야 하는데 채팅 유저를 저장할 table이 없어서 발생한 오류
- 검색을 해봤으나 테이블 이름의 문제라는 얘기가 있었음
- ⇒ 테이블 이름은 원래 쓰던 대로 떴고, 문제없어 보였음
- ddl-auto 설정을 바꾸라고 함
- ⇒ 동일한 설정으로 계속 사용했었는데 이걸 바꾸는 게 해결책은 아닐 것 같았음
👉 접근 방법
- SQLyog에 접속해서 테이블 생성 쿼리를 입력했으나 오류 발생
- SQLyog : DB관리를 위한 GUI 클라이언트 툴
- 테이블 생성이 안 돼서
DROP DATABASE IF EXISTS [DB 이름]
입력해도 오류 발생
👉 해결 방법
- DB 서버 중지 → DB 디렉터리 확인(mysql → DB명과 같은 폴더) → 해당 폴더 내부의 파일 삭제(chat_user.ibd 파일이 있었음) → DB 서버 재시작
- 주의할 점
- 중요한 데이터가 있다면 백업을 하는 것이 좋음