MySQL 파일로 데이터 Import, Export하기

가수왕·2022년 6월 15일
0

DB

목록 보기
1/3
post-thumbnail

DB Data Processing

DB를 사용하면 필수적으로 외부 파일에서 데이터를 읽어 저장해야 하는 경우가 발생한다. 오늘 어떻게 외부 파일에 있는 데이터를 DB에 저장해야 하는지 csv파일과 txt파일을 이용해 공부해봤다.

도로명주소가 저장된 txt 파일과 선별진료소의 정보가 담겨 있는 csv파일을 이용했고, DB는 mysql을 사용했다.

외부파일 데이터를 DB에 저장하기 위해서

1. Workbench Table Data Import Wizard를 이용하는 방법

2. 명령문을 이용하는 방법

두가지 방법을 사용했다. 1번은 csv파일을 사용했고, 2번은 txt파일을 사용해 진행했다.



1. Workbench Table Data Import Wizard

1번 방법은 테이블이 존재하지 않아도 Data Import Wizard가 알아서 테이블과 컬럼을 생성해 주었기 때문에 크게 어렵지는 않았다. 하지만 1번방법을 진행하면서 "cp949 codec can't decode byte ~" 오류가 발생했다. 이 오류가 발생한 원인은 mysql과 csv파일의 인코딩 방식이 달라 발생한 것 같았다.처음에는 csv파일에서 필요한 부분만 잘라서 csv(utf-8)로 저장을 했었는데 그냥 csv로 저장을 했더니 해결되었다.

이 방식은 정말 편했다. 하지만 실제 회사에서는 workbench를 사용하지 않는 경우도 있다는 소리를 듣고 조금 아쉬웠다.


2. 명령문을 이용하는 방법

외부 파일을 읽기 위한 명령문은 bulkInsert와 loadData가 있는것으로 보이는데 나는 loadData를 이용했다. 명령문을 만드는건 크게 어렵지 않았다. 파일의 위치 지정, 데이터를 삽입할 테이블 명 지정, 컬럼 구분자 지정, 행 구분자 지정만 해주면 되었기 때문이다.

쉽게 끝날거라는 내 예상은 ErrorCode 1290을 보는 순간 무너져 내렸다.
에러를 확인해 보니 mysql이 --secure-file-priv 옵션이 켜진채로 실행 되어서 발생했다고 한다. 이 에러를 해결하는 방법은 두가지였다. 하나는 my.ini파일에 secure file priv 옵션의 경로를 ""로 설정하는 것과 옵션에 이미 지정된 경로에 읽으려는 파일을 옮기는 것이었다. 나는 지정된 경로에 txt파일을 옮겼다.

이 에러 다음에는 마지막 행이 컬럼수가 부족하다는 에러가 발생했다. 이 에러는 txt파일에 입력된 데이터 끝에 개행문자인 '\n'이 생략되어 발생한 오류로 보여 마지막 줄에 공백 한줄을 추가해 해결했다.

명령문을 이용하는건 크게 어렵지 않았지만 몇번의 클릭으로 할 수 있는걸 타이핑 한다는 것에서 오는 귀찮음이 너무 컸다.


3. 번외 - csv파일로 Export하기

파일로 데이터를 읽었다면 당연히 파일로 내보내는 것도 해봐야 하지 않겠는가? 이 과정도 Workbench Table Data Export Wizard와 쿼리를 이용하는 방법이 있다. 이번에는 쿼리를 이용해 Export를 해보았다. select문을 이용해 데이터를 선택하고 into outfile을 이용해 파일의 경로를 지정하고 구분자등을 지정해주면 된다. 단도직입적으로 말하면 쿼리를 이용하는 방법은 실패했다. 이 경우에도 처음 1290에러가 발생해서 해당 위치에 csv파일을 만들었는데 파일이 존재하지 않는다는 에러가 발생했다. 아직까지 해결방법을 찾지 못해 일단 Export Wizard를 이용해 진행했다.


4. 후기

DB에서 csv파일을 읽는걸 어렵다고 생각하고 손대지 못했는데 막상 해보니 생각보다 쉬웠다. 다양한 방법이 있다는걸 알았다. DB Data Processing을 두가지 방법으로 진행하면서 생긴 궁금증인데, 명령문을 이용하는건 옵션에 설정된 경로에 있는 파일만 읽고 쓰는게 가능한데 Wizard를 이용하면 경로에 상관없이 읽고쓰는게 가능했다. 두개의 차이가 어디서 발생하는지 궁금해졌다.

0개의 댓글