inblog logo
|
vlogue
    DBJava & Spring BootJava & JPA & Hibernate

    Spring boot 3 Migration MySQL ⇒ MariaDB

    MySQL에서 MariaDB 로
    김주혁's avatar
    김주혁
    Jun 26, 2024
    Spring boot 3 Migration MySQL ⇒ MariaDB
     
    회사에서 rds mysql을 사용하다, aws vpc private subnet 안에서 운용되는 rds에 새롭게 mariadb로 데이터베이스를 이전하기로 했다.
     
    사용 중인 Spring boot 버전은 다음과 같다.
    plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0' id 'org.asciidoctor.convert' version '1.5.8' } java { sourceCompatibility = '17' } dependencies { implementation 'com.zaxxer:HikariCP:5.0.1' implementation 'org.hibernate.orm:hibernate-core:6.0.2.Final' implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' implementation 'org.apache.commons:commons-pool2:2.11.1' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" }
     
    해당 설정 환경 구성을 제외한, 나머지는
     
    기존 mysql을 고려한 설정값을 사용하다, mariadb를 사용하려고 하니 문제가 계속해서 발생했다. 설정으로 해결하는 방법은 다음과 같다.
     
    • build.gradle
    runtimeOnly 'com.mysql:mysql-connector-j'
     
    해당 runtimeOnly로 사용하는 mysql connector를
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' implementation 'org.mariadb.jdbc:mariadb-java-client:3.0.6'
    로 변경해주고 실행시켜야, 아래 application.yaml의 driver-class-name에 org.mariadb.jdbc.Driver를 사용할 수 있게 된다.
     
    • application.yaml 설정 변경
      • datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://${HOST}:${PORT}/dev?autoReconnect=true&passwordCharacterEncoding=UTF-8 username: ${USERNAME} password: ${PASSWORD} jpa: database-platform: org.hibernate.dialect.MySQLDialect
         
      • driver-class-name : 첫 번째로 수정해야 하는 항목은 driver-class-name이다.
        • driver-class-name: com.mysql.cj.jdbc.Driver => driver-class-name: org.mariadb.jdbc.Driver
         
      • url : 두 번째로 수정해야 하는 항목은 url이다.
        • url: jdbc:mysql://${HOST}:${PORT}/dev?autoReconnect=true&passwordCharacterEncoding=UTF-8 => jdbc:mariadb://localhost:${PORT}/dev # localhost인 이유는 ssh로 터널링 했기 때문이다.
         
      • jpa database-platform : 세 번째로 수정해야 하는 항목은 데이터베이스 플랫폼이다.
        • jpa: database-platform: org.hibernate.dialect.MySQLDialect properties: hibernate: format_sql: true implicit_naming_strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy physical_naming_strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy hbm2ddl.auto: none jdbc: batch_size: 10 hibernate: ddl-auto: none open-in-view: false show-sql: false => jpa: properties: hibernate: format_sql: true implicit_naming_strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy physical_naming_strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy hbm2ddl.auto: none jdbc: batch_size: 10 dialect: org.hibernate.dialect.MariaDBDialect hibernate: ddl-auto: none open-in-view: false show-sql: false
           
          이 부분에서 많이 고생했는데,
          jpa: database-platform: org.hibernate.dialect.MySQLDialect
          database-platform으로 사용하던 Dialect가 mariadb를 사용하려고 하니
          dialect: org.hibernate.dialect.MariaDBDialect
          이런 형태로 들어가야 했기 때문에,
          jpa: database-platform: Maria10Dialect
          이렇게 사용하려다 계속해서 에러가 발생했다.
     
    • querydsl의 generated 폴더
      •  
        혹시 몰라서 제거해 줬다.
         
     
    위와 같은 설정의 mysql 프로젝트를 저런 형태로 변경하니 mariadb로 잘 실행됐다.
    같은 문제를 겪고 있다면, 한 번 도전해 보는 것도 좋다고 생각한다.
     
    참고로 ssh 터널링은 아래 방식으로 사용하고 있다.
    ssh -i {bastion pem} -L {forwading port}:{host}:{rds port} {user}@{bastion ip}
    Share article

    vlogue

    RSS·Powered by Inblog