MySQL를 배우던 도중 학습용 CSV 파일을 Import 할 일이 생겼습니다. Import 방법은 크게 두가지로 나뉩니다.
OS : MacOs
MySQL: Docker Image (tag: latest)
DB manage tool : MySQL-cli
워크벤치에서는 Table Data Import 기능으로 CSV 파일을 자동으로 테이블을 Import가 가능합니다. 하지만 _CLI 에서는 테이블을 직접 생성해주어야 합니다.
CREATE TABLE customer(
id int,
gender varchar(10),
age int,
created_at date
);
컨테이너 볼륨에 CSV 파일을 넣으면 됩니다.
컨테이너 내부에서는 var/lib/mysql
경로로 파일을 찾을 수 있습니다.
LOAD DATA
INFILE '/var/lib/mysql/sample_datas/tbl_customer.csv' -- 해당 파일을...
INTO TABLE customer -- customer 테이블에 넣는다.
FIELDS TERMINATED BY ',' -- 각각의 필드는 ,으로 나뉜다.
LINES TERMINATED BY '\n' -- 각각의 row는 줄건너뛰가로 나뉜다.
IGNORE 1 LINES -- 가장 첫번째 row는 필드명이기 때문에 무시한다.
(id, created_at, gender, age); -- csv 데이터 순서에 맞게 입력하자.
보안을 위해 허용된 prefix 내의 파일만 읽게 정하는 설정인 secure_file_priv
을 확인해봐야 합니다.
select @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
넣은 파일의 경로와 해당 환경변수의 경로가 다르다면 에러가 발생하게 됩니다. 이를 해결하기 위한 방법은 두가지 입니다.
우선 해당 환경변수는 읽기전용이기 때문에 running 환경에서는 변경이 불가합니다.
mysql> set global secure_file_priv="";
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable
그래서 설정파일로 이동해 직접 변경을 해주어야 합니다.
$ vi /etc/mysql/my.cnf # mysql 환경변수 설정
[mysqld]
secure-file-priv = "" # 경로 삭제
secure-file-priv = "/var/lib/mysql/sample_datas" # 또는 현재 데이터가 있는 경로로 변경
다시 한번 데이터를 입력하면 성공하게 됩니다.
잘봤습니다. 좋은 글 감사합니다.