[MySQL] csv 파일을 직접 MySQL 테이블로 Import 하는 방법 (대용량 파일 import 팁)

MySQL 테이블에 데이터를 넣는 방법 중 csv 파일을 직접 넣는 방법이 있다.


csv 파일과 DB 테이블 구조가 일치하면 아래와 같이 입력하면 된다.


LOAD DATA LOCAL INFILE "filePath" 
INTO TABLE dbName.tableName FIELDS TERMINATED BY ",";



만약 파일의 크기가 크고 테이블에 index가 걸려 있으면 시간이 굉장히 오래 걸릴 수 있다.

그럴 경우에는 아래와 같이 index를 먼저 해제해 주고 파일을 올린 다음 다시 index를 걸면 상당히 빠르게 테이블에 데이터를 넣을 수 있다.


ALTER TABLE dbName.tableName DISABLE KEYS;
LOAD DATA local INFILE "filePath" 
INTO TABLE dbName.tableName FIELDS TERMINATED BY ",";
ALTER TABLE dbName.tableName ENABLE KEYS;


대략 2GB 정도 되는 파일도 10분 정도로 import가 완료됐다.



만약 csv 파일 구조와 DB 테이블 구조가 다른 경우는 아래 샘플 sql 문 참조해서 import 한다.



LOAD DATA LOCAL INFILE 'file_name'
INTO TABLE table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(column1,column2,column3, ...);


쉘 스크립트 백그라운드로 실행하는 방법(Run Shell Script in Background)

shell script 를 background로 실행하려면 다음과 같이 입력해보자.


nohup script >script.out 2>script.err &



script를 실행하는 도중 output 이 있다면 script.out 파일로 저장이 되고, 에러 메세지는 script.err 파일에 저장이 된다.




만약 일반적인 출력과 에러 메세지를 하나의 파일에 저장되도록 하려면 다음과 같이 하면 된다.


nohup script >script.out 2>&1 &





output을 저장하고 싶지 않을 때도 있다. 그럴때는 아래와 같이 /dev/null 로 출력을 redirect 하면 된다.


nohup script >/dev/null 2>&1 &




[Oracle]SQLPLUS에서 외부 스크립트 실행하기

 간단한 팁이지만 모르는 분을 위해서...

# SQLPLUS -S <username>/<password> < <filename>

-S : uses silent mode

예) sqlplus -S scott/tiger < /data/script/test.sql