본문으로 바로가기

이번 포스팅에서는 Embulk를 사용하여 GCP의 Cloud SQL(MySQL)에 데이터를 넣어보는 테스트를 해보겠다.


MySQL관련 Plug-in 설치

아래는 MySQL관련 플러그인 설치 커맨드이다.

$ embulk gem install embulk-input-mysql
$ embulk gem install embulk-output-mysql


# input은 데이터를 받아올 곳, output은 데이터를 넣을 곳 이라고 이해하면 된다. 

ex) MySQL에서 꺼내서 Bigquery에 넣고싶다면 input-mysql, output-bigquery


이제, Embulk에서 제공해주는 example 데이터로 (csv파일) Cloud SQL에 넣어보자.



Embulk Example (CSV -> MySQL)


Embulk에서는 기본적으로 예제를 지원한다. 

예제로 생성되는 csv파일로부터 데이터를 읽어와 MySQL에 넣어보는 작업을 해보겠다.


우선, 다음 명령어로 sample을 만들자.


$ embulk example
2017-10-10 05:28:29.070 +0000: Embulk v0.8.35
Creating embulk-example directory...
    Creating embulk-example/
    Creating embulk-example/csv/
    Creating embulk-example/csv/sample_01.csv.gz
    Creating embulk-example/seed.yml

Run following subcommands to try embulk:

     1. embulk guess embulk-example/seed.yml -o config.yml
     2. embulk preview config.yml
     3. embulk run config.yml

그럼 디렉토리에 embulk-example이 생성된다.


다음 명령어를 통해 embulk-example 디렉토리로 들어가면, csv파일과 seed.yml 파일이 생성되어 있는 것을 볼 수 있다.


$ cd embulk-example/
$ ls
csv      seed.yml


Embulk는 기본적으로 설정에 대한 부분은 yml파일에 명시를 해놓고 실행하는 식으로 되어 있다.

기본적으로 생성이 되는 seed.yml을 열어보면 다음과 같다.

  • in: - 읽어들이는쪽의 설정 (플러그인에 따라 달라짐)
  • out: - 로딩하는쪽의 설정 (플러그인에 따라 달라짐)
in:
  type: file # file 타입의 파일 여기서는 csv 파일
  path_prefix: "/Users/jungwoon/embulk-example/csv/sample_" # csv 파일 경로
out:
  type: stdout # stdout은 그냥 화면 출력

yml이 만들어졌으면 embulk guess란 명령으로 해당 데이터에 대한 추론이 가능할 뿐 아니라 자동으로 설정까지 만들어 준다.

일단 아래 명령어를 통해 seed.yml에 대해서 확인을 한다.

$ embulk guess seed.yml

그럼 위와 같이 결과가 나온다. 이 추론을 이용해서 -o 옵션을 통해 설정 파일을 만든다.

$ embulk guess seed.yml -o config.yml

그럼 config.yml이란 파일이 생성이 되면서 위에서 추론했던 결과가 그대로 들어가게 된다.

그럼 이제 out: 부분을 수정해서 MySQL에 들어가도록 config.yml을 수정한다.

원래 guess를 하면 time, purchase 둘 다 timestamp인데 MySQL에 두개가 한번에 들어가면 에러가 나서 purchase를 string으로 바꿔줌

in:
  type: file
  path_prefix: /home/Tora/embulk-example/csv/sample_
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: LF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: string} # timestamp가 들어가면 에러가 나서 String으로 바꿔줌
    - {name: comment, type: string}
out:
    type: mysql
    host: [Database IP]
    port: 3306
    user: [Databse ID]
    password: [Database PW]
    database: [Database Name]
    table: [Table Name]
    mode: replace

여기서 out: 부분에 Cloud SQL의 정보를 각각 입력하면 된다.

그렇다면, 이제 Cloud SQL을 세팅해보자.

먼저, 콘솔의 좌측 대시보드에서 SQL탭을 클릭 후, 좌측 상단에 있는 인스턴스 생성 버튼을 누른다.

위와 같이 MySQL 선택 -> 2세대 선택 -> 인스턴스 ID 및 root 비밀번호 설정, 지역선택 후 생성버튼을 누른다.

그러면 Cloud SQL이 생성된다.

이제 out: 부분에 입력할 것들을 세팅하면 된다. (데이터베이스 정보)

1. 생성된 SQL 인스턴스를 클릭한다.

2. 사용자 계정을 생성한다.

사용자 탭 클릭 -> 사용자 계정 생성 클릭 -> 사용자 이름과 비밀번호 설정 -> 생성

3. 데이터베이스를 만든다.

데이터베이스 탭 클릭 -> 데이터베이스 만들기 클릭 -> 데이터베이스 이름 작성 -> 만들기 클릭

4. 네트워크 승인 설정을 한다.

승인 탭 클릭 -> 네트워크 추가 -> 네트워크 이름 및 ip 입력 -> 저장 클릭

# 여기서 승인하는 네트워크는 본 글의 테스트 환경인 VM 인스턴스의 외부 IP이다.

# VM 인스턴스의 외부 IP - 이 외부 IP는 임시 IP이므로 변동이 일어난다. 

(고정을 원하면 VM 인스턴스의 설정을 변경하면 된다.)

이제, config.yml에 해당 정보를 입력하면 된다.

입력을 완료한 모습

저장을 하고 다음 명령어로 실행을 시킨다.

$ embulk run config.yml

그럼 다음과 같이 진행 상황이 나온다.

그 다음 데이터가 잘 들어갔나 확인을 해보면 다음과 같이 잘 들어간 것을 확인할 수 있다.


다음 포스팅에서는 현재 들어간 Cloud SQL의 sample데이터를 GCP의 Bigquery에 넣어보는 테스트를 해보겠다.

(다음챕터 : Embulk를 이용한 MySQL -> Bigquery 데이터 삽입)


# 궁금한점은 댓글 남겨주시면 부족한 지식이지만 답변 드리겠습니다.



참고자료 : 

1. Jungwoon Blog - Embulk 설치 및 기본 사용법 - https://jungwoon.github.io/bigdata/2017/08/31/Embulk_Setup/