스프링 부트와 MariaDB 환경에서 Table doesn't exist 오류 해결하기

LeeYulhee·2023년 9월 19일
0

👉 오류 내용(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 이름] 입력해도 오류 발생
    • 오류 코드
      Error dropping database (can't rmdir '.\TeamSteam', errno: 41 "Directory not empty")
      • 해당 디렉터리가 비어 있지 않아서 삭제할 수 없다는 뜻



👉 해결 방법


  • DB 서버 중지 → DB 디렉터리 확인(mysql → DB명과 같은 폴더) → 해당 폴더 내부의 파일 삭제(chat_user.ibd 파일이 있었음) → DB 서버 재시작
  • 주의할 점
    • 중요한 데이터가 있다면 백업을 하는 것이 좋음
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글