Embulk에서 MySQL에서 PostgreSQL로 데이터 전송
13567 단어 MySQLPostgreSQL도커Embulk
소개
다른 RDBMS간에 데이터를 전송하는 작업이 발생했습니다.
조사하고 있는 가운데, 지금 게다가 Embulk를 알았으므로 그 사용법의 메모입니다.
이번에는 MySQL -> PostgreSQL 데이터로드를 수행합니다.
Embulk이란?
공식 GitHub
Embulk is a parallel bulk data loader that helps data transfer between various storages, databases, NoSQL and cloud services.
Embulk supports plugins to add functions. You can share the plugins to keep your custom scripts readable, maintainable, and reusable.
자쿠리 설명하면
환경 구축
Docker를 사용하여 환경을 구축합니다.
전제
디렉토리 구성
embulk
├── Dockerfile
├── docker-compose.yml
├── mysql
│ └── init
│ ├── 01_database.sql
│ └── 02_mock_data.sql
└── postgres
└── init
└── 01_database.sql
데이터베이스
docker-compose를 이용하여 MySQL과 PostgreSQl을 구축합니다.
docker-compose.yml
version: "3"
services:
mysql:
image: mysql
ports:
- "3306:3306"
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: root
postgres:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
volumes:
- ./postgres/init:/docker-entrypoint-initdb.d/
adminer:
image: adminer
ports:
- 8080:8080
데이터베이스 초기화
MySQL
여기 에서 샘플 데이터 sql을 다운로드합니다.
mysql/init/01_database.sql
create database embulk_in;
mysql/init/02_mock_data.sql
se embulk_in;
create table MOCK_DATA (
id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(50),
gender VARCHAR(50),
ip_address VARCHAR(20)
);
insert into MOCK_DATA (id, first_name, last_name, email, gender, ip_address) values (1, 'August', 'Stribling', '[email protected]', 'Male', '11.65.224.59');
insert into MOCK_DATA (id, first_name, last_name, email, gender, ip_address) values (2, 'Ian', 'Danovich', '[email protected]', 'Male', '135.187.239.143');
...
PostgreSQL
postgres/init/01_database.sql
create database embulk_out;
embulk
Embulk용 Dockerfile을 만듭니다.
여기 를 참고로 Dockerfile을 작성합니다.
Dockerfile
FROM openjdk:8-jre-alpine
# install Embulk
RUN wget -q https://dl.embulk.org/embulk-latest.jar -O /bin/embulk \
&& chmod +x /bin/embulk
# add plugin
RUN apk add --no-cache libc6-compat \
&& embulk gem install embulk-input-mysql \
&& embulk gem install embulk-output-postgresql
WORKDIR /embulk
ENTRYPOINT ["java", "-jar", "/bin/embulk"]
플러그인
시작
embulk 의 이미지 작성과 컨테이너를 기동시킵니다.
# embulkのイメージを作成
docker build -y embulk .
# MySQLとPostgreSQLのコンテナを起動
docker-compose up -d
확인
Adminer에서 MySQL 데이터를 확인합니다.
로드
구성 파일 작성
MySQL에서 PostgreSQL로 데이터를로드하는 구성 파일을 만듭니다.
embulk/seed.yml
in:
type: mysql
host: {localhostのプライベートアドレス}
user: root
password: "root"
database: embulk_in
table: MOCK_DATA
out:
type: postgresql
host: {localhostのプライベートアドレス}
user: root
password: "root"
database: embulk_out
table: MOCK_DATA
mode: insert
column_options:
id: { type: "INT" }
first_name: { type: " VARCHAR(50)" }
last_name: { type: " VARCHAR(50)" }
email: { type: " VARCHAR(50)" }
gender: { type: " VARCHAR(50)" }
ip_address: { type: " VARCHAR(20)" }
실행
로드합니다.
# seed.ymlから完全なコンフィグファイルを生成
docker run --rm -it -v $(pwd):/embulk embulk guess seed.yml -o config.yml
# dry run
docker run --rm -it -v $(pwd):/embulk embulk preview config.yml
# 実行
docker run --rm -it -v $(pwd):/embulk embulk run config.yml
확인
Adminer에서 PostgreSQL 데이터를 확인합니다.
끝에
이용하고 싶은 플러그인이 없어도(Hive라든지), JDBC만 있으면 embulk-input-jdbc 등으로 로드할 수 있어 이용 범위가 넓다고 느꼈습니다.
Reference
이 문제에 관하여(Embulk에서 MySQL에서 PostgreSQL로 데이터 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/777nancy/items/d5512bffab50a0796c5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)