텍스트 파일에 저장된 대량의 데이터를 MySQL 테이블로 한 번에 옮기고 싶다면 LOAD DATA INFILE 구문을 사용하는 것이 가장 빠르고 효율적인 방법입니다. 이 글에서는 탭(Tab)으로 구분된 텍스트 파일의 데이터를 MySQL 테이블로 가져오는 전체 과정을 단계별로 살펴보겠습니다.
1. 예제 데이터 준비
먼저 가져올 데이터가 담긴 텍스트 파일을 준비합니다. 아래 예시에서는 각 필드가 탭 문자로 구분되어 있는 'A.txt' 파일을 사용하며, 파일 경로는 d:/A.txt라고 가정합니다.
100 John USA 10000 101 Paul UK 12000 102 Henry NZ 11000 103 Rick USA 17000 104 Corey USA 15000
2. 데이터를 담을 테이블 생성
다음으로, 텍스트 파일의 데이터를 저장할 테이블을 미리 만들어 둡니다. 파일의 각 컬럼(Id, Name, Country, Salary)과 순서 및 데이터 타입이 일치하도록 테이블을 설계하는 것이 중요합니다.
mysql> CREATE TABLE employee_tbl(
Id INT,
Name VARCHAR(20),
Country VARCHAR(20),
Salary INT
);
Query OK, 0 rows affected (0.91 sec)
3. LOAD DATA INFILE로 데이터 가져오기
테이블이 준비되었다면 이제 LOAD DATA INFILE 구문을 실행하여 파일의 데이터를 테이블로 불러올 수 있습니다. 로컬 시스템에 있는 파일을 사용할 경우 LOCAL 키워드를 함께 지정합니다.
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO TABLE employee_tbl; Query OK, 5 rows affected (0.15 sec) Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
실행 결과 메시지를 보면 총 5개의 레코드가 성공적으로 입력되었고, 삭제되거나 건너뛴 행은 없으며 경고도 발생하지 않았음을 확인할 수 있습니다.
4. 결과 확인
SELECT 문으로 테이블 내용을 조회하면 텍스트 파일의 데이터가 정상적으로 들어왔는지 검증할 수 있습니다.
mysql> SELECT * FROM employee_tbl; +------+-------+---------+--------+ | Id | Name | Country | Salary | +------+-------+---------+--------+ | 100 | John | USA | 10000 | | 101 | Paul | UK | 12000 | | 102 | Henry | NZ | 11000 | | 103 | Rick | USA | 17000 | | 104 | Corey | USA | 15000 | +------+-------+---------+--------+ 5 rows in set (0.00 sec)
위 결과 집합을 통해 A.txt 파일의 모든 데이터가 employee_tbl 테이블로 정상적으로 이전되었음을 확인할 수 있습니다.
참고: 자주 발생하는 오류와 해결 방법
- secure_file_priv 제한: MySQL 서버 설정에 따라 특정 디렉터리에서만 파일을 읽을 수 있습니다.
SHOW VARIABLES LIKE 'secure_file_priv';명령으로 허용된 경로를 확인하고, 해당 위치에 파일을 두거나 설정을 조정해야 합니다. - 구분자 지정: 기본 구분자는 탭입니다. 쉼표(CSV) 등 다른 구분자를 사용하려면
FIELDS TERMINATED BY ','옵션을 추가하면 됩니다. - LOCAL 키워드: 클라이언트 컴퓨터의 파일을 읽으려면 LOCAL을 붙여야 하며, 서버 측 설정(local_infile)이 활성화되어 있어야 정상 동작합니다.