주니어 기초 코딩공부/Database 기초

spring boot mysql -> mariadb로 연동시 났던 오류 모음집

jju_developer 2023. 12. 15. 10:58
728x90

안녕하세요 jju_developer입니다.

오늘은 mysql에서 mariadb로 연동시 났던 오류들을 총정리해보겠습니다~!

 

[지난시간 내용 확인]

 

[MariaDB] 데이터베이스 MYSQL에서 MariaDB로 연동하기

안녕하세요 jju_developer 입니다. 오늘은 기존 mysql을 사용하다가 maria db로 연동을 해야하는 일이 생겨서 해당 부분을 기록하려고 합니다. 우선 mysql에 있는 모든 테이블과 정보들을 덤프로 떠서 그

jju240.tistory.com

 

 

[스프링] Tomcat MariaDB 연동

안녕하세요 jju_developer 입니다. 지난시간에 mysql에서 maria 디비로 연동하는 방법에 대해 알아보았습니다. 데이터베이스 MYSQL에서 MariaDB로 연동하기 안녕하세요 jju_developer 입니다. 오늘은 기존 mysql

jju240.tistory.com

 

저는 스프링 프로젝트와 스프링 부트 프로젝트를 둘다 mysql에서 mariaDB로 이관을 시켜야 했기 때문에

 

스프링 레거시에서는 잘 돌아가는데 똑같이 스프링 부트에서도 설정을 mariadb로 했는데 

오류가 빵빵 나더라구요.

 

비교적 스프링 했을때는 간단했는데 스프링부트 api소스를 고치는데 오류 잡느라 하루를 꼬박 보내야 했습니다.

 

아마 이글을 보시는 분들중에서도 스프링 부트로 돌릴때 문제가 있는 분들이 있으리라 생각 됩니다.

 

우선, 저는 스프링부트 오류에 대해 정리를 해보겠습니다.

 

★개발환경 ★
인텔리제이, 스프링부트, SDK 1.8, mybatis, jsp, mysql > mariadb, svn

 

 

 

부트에서 변경한 설정

 

1. pom.xml

<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>3.1.4</version>
</dependency>

 

2. DatabaseConfig.java

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

    entityManagerFactoryBean.setDataSource(dataSource);

    entityManagerFactoryBean.setPackagesToScan(entitymanagerPackagesToScan);
    entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    Properties jpaProperties = new Properties();

    // MariaDB Dialect 설정
    jpaProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

    entityManagerFactoryBean.setJpaProperties(jpaProperties);

    return entityManagerFactoryBean;
}

 

여기서 가장 중요한 부분은

jpaProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

이부분,,,,!!! 이거 때문에 고생고생을 했는데..

 

마리아디비라서 MySQLDialect 부분을 

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

이렇게 바꿨었는데... never do it

 

결론은 아니였습니다.

ㅎ.. mysql 설정 했었던 것 처럼 그대로 MySQLDialect을 사용하더라구요?

왜인지는 모르겠지만... mariadb 사용하실때 저처럼 마리아로 다 바꾸면 안된다는점... 메모....

 

3. application-properties

# Database
dataSource.driverClassName=com.mysql.cj.jdbc.Driver
dataSource.url=jdbc:mysql://100.0.0.1:3016/jjudb?characterEncoding=UTF-8&useSSL=false 
dataSource.username=아이디
dataSource.password=비번
datasource.initialize=true

 

여기서 또 중요한 점은

 

# Database
dataSource.driverClassName=org.mariadb.jdbc.Driver

이렇게 또 마리아 디비라고 mariadb.jdbc로 하면 안된다는점....!!!!!!!!

 

계속 마리아한테 낚이고 결국 mysql 드라이버로 하면 된다는 기적같은 소식....

 


spring.main.allow-bean-definition-overriding=true

# Server configuration
server.port=원하는포트

# PackagesToScan
entitymanager.packagesToScan=kr.co.sbsystems.api.models

# MyBatis
mybatis.typeAliasesPackage=kr.co.sbsystems.api.models
mybatis.mapperLocations=classpath*:**/mappers/**/*.xml


#spring.jpa.databases=mariadb
spring.jpa.database=mysql
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

 

처음에는 진짜... 기존 mysql로 되어있던 부분 다 mariadb로 했었는데 오류 빵빵났습니다.

 

원인인놈은 바로

#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

 

얘랑

#spring.jpa.databases=mariadb

 

이 두녀석 이였습니다.

 

꼭 mysql로 변경하세요!

 

[오류내용들 모음]

Related cause: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with ----

Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file------

위 오류는 다 설정 변경하니까 해결 되었습니다.

 

 

[데이터베이스 mysql꺼 mariadb로 dump뜰때 생겼던 오류]

 

※ 덤프파일 뜨고 import 해줄때 에러

[Mysql] Unknown collation: 'utf8mb4_0900_ai_ci'
11:36:28 Restoring C:\Users\jju\Documents\dumps\test\jju_dump.sql
Running: mysql.exe --defaults-file="c:\users\public\documents\estsoft\creatortemp\tmpntep4y.cnf"  --protocol=tcp --host=100.0.0.1 --user=root --port=3016 --default-character-set=utf8 --comments --database=test  < "C:\\Users\\jju\Documents\dumps\test\jju_dump.sqll"
ERROR 1273 (HY000) at line 207: Unknown collation: 'utf8mb4_0900_ai_ci'

여기서 Unknown collation: 'utf8mb4_0900_ai_ci' 에러는 
덤프를 뜬 sql 파일을 열어서 utf8mb4_0900_ai_ci 을 싹 다 utf8mb4_general_ci 로 변경해주었더니
에러가 사라지면서 import 가 잘 되었습니다.

해결된 dump 로그
11:41:12 Restoring C:\Users\Geunju\Documents\dumps\jju\test.sql
Running: mysql.exe --defaults-file="c:\users\public\documents\estsoft\creatortemp\tmpu2bza5.cnf"  --protocol=tcp --host=100.0.0.1 --user=root --port=3016 --default-character-set=utf8 --comments --database=test  < "C:\\Users\\Geunju\\Documents\\dumps\\jju\test.sql"
11:41:27 Import of C:\Users\Geunju\Documents\dumps\test\test_dump.sql has finished

 

그럼 오늘도 수고하셨습니다~!!!

 

추가 오류 있으시면 댓글로 알려주세요 ^,^

728x90