ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Embulk Maria DB TimeZone 에러 해결법(docker 환경)
    Data Engineering/Embulk 2021. 6. 4. 16:16
    반응형

    Embulk를 사용하다가 MariaDB -> Postgresql 로 데이터를 이관하는 작업을 진행을 맡았다..

    그리고 테스트로 도커 환경에서 시작했고, 처음에 jdbc 오류부터 해서 오만가지 에러가 떴다..

     

    1번 에러

    java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

     

    아니 이건 path 설정을 몇번을 하고, docker 내에 넣어도 안되고, 외부에 빼놔도 인식을 못했다.

    그래서 그냥 embulk 옵션에서 driver_path 옵션을 빼 버렸다..ㅋㅋㅋ

     

     

    2번 에러

     

    The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

     

    이런 timezone이 안 맞는다고 떴다.

    구글링을 해보니깐 url을 맞추라고 했는데, embulk의 mysql 중 옵션에는 url이 없다..ㅋㅋ

    그래서 docker로 mariadb를 생성할 때, config파일을 수정해줬다.

    path는 다음과 같다.

     

    /etc/mysql/conf.d

     

    my.cnf 파일을 수정해주자.

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server           = utf8mb4
    collation-server               = utf8mb4_unicode_ci
    default_time_zone = '+9:00'
    
    [mariadb]
    default_time_zone = '+9:00'

    default_time_zone을 '+9:00' 으로 바꿔줬다. 즉 한국시간으로 맞춰줬다.

    분명히 docker-compose를 실행할 때, 타임존을 몇번이나 맞춰줬는데 mariadb는 또 다시 맞춰야했다.

    아마도 mysql도 비슷한 듯 하다.

    input, output driver도 mysql꺼를 같이 쓰니깐..?ㅋㅋ

     

    아 그리고 embulk의 input, output을 작성할 때 꼭 github 문서를 확인하자...

    구글에 자료가 얼마 없다보니깐 에러 대응이 너무 안돼서 힘들다...
    옵션도 전부 다르니깐 한번씩은 꼭 확인해서 에러 대응 잘 하시길

     

    예시로 mysql-input

    https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-mysql

     

    embulk/embulk-input-jdbc

    MySQL, PostgreSQL, Redshift and generic JDBC input plugins for Embulk - embulk/embulk-input-jdbc

    github.com

     

     

     


    파일을 수정할 수 없는 경우에는

     

     

    yml 파일에서

    mariadb input 쪽에 options를 주면 된다.

     

    in:
       type:mysql
        ...
    
       options: {useLegacyDatetimeCode: true,useTimezone: true , serverTimezone: Asia/Seoul, socketTimeout: 2100000}
       
    out:
        ...

     

    반응형

    'Data Engineering > Embulk' 카테고리의 다른 글

    Hive sql Partition  (0) 2021.02.27
Designed by Tistory.