문제의 시작은 이렇다.

나는 데이터베이스에 20만개 이상의 데이터를 넣으려했고,

그렇기 위해서 하나하나 Insert를 하면 속도 측면에서 느리고, 반복문으로 넣게 되면 스택이 터지는 문제도 발생하였다.

따라서 데이터들을 CSV 파일로 변경 후, 그에 맞는 쿼리? 문을 날려서 넣는 방법을 택했다.

그 방법은 아래와 같다.

 

LOAD DATA INFILE "파일의 절대경로"

INTO TABLE transactions 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(transaction_id, user_id, type_id, money, date, category_id, payment_id, content);

 

이렇게 컬럼 명과 경로를 잘 입력해주면, CSV에 입력된 파일이 빠르게 들어간다고 하여, 이 방법을 택했다.

 

하지만 문제가 발생했다.

이 글의 제목처럼 --secure-file-priv 옵션이라 안된다고 한 것이다.

 

이 옵션에 의해서 내가 쓰는 쿼리? 명령? 문이 작동할 수 없다는 것이였다.

 

그리고 

 

SHOW VARIABLES LIKE "secure_file_priv";

혹은
SELECT @@GLOBAL.secure_file_priv;

 

라는 명령어로 어떤 경로에 있는 파일들만 LOAD DATA INFILE을 할 수 있는지 알 수 있다고 하였다.

 

 

구글링을 하니 3가지 경우가 있었다.

1. 저 경로가 특정 경로로 지정되어 있다

2. null

3. ""

 

 

만약 1번의 경우 내가 넣으려는 파일을 저 경로 안에 넣어주어서 해결하면 되고,

2번의 경우에는 아무것도 넣을 수 없고,

3번의 경우가 모든 경로에 있는 파일을 넣을 수 있다는 의미라고 한다.

 

 

그러니까 3번으로 바꾸어주어서 해결할 수 있고, 이건 my.cnf 파일을 수정하여 해결할 수 있다!라고 되어있다.

 

또는 LOAD DATA LOCALE INFILE "파일의 절대경로" 으로 해결 할 수 있다고 한다. 

하지만, 버젼 문제로 안된다고 하였고, 아마 내가 MariaDB를 사용하거나, 아니면 예전 버젼을 설치해서 문제가 되는 것 같았다.

그리고 배포할 서버에서, 최신 버젼을 지원하지 않을 수도 있으니, 나는 my.cnf를 수정하여 해결해보기로했다.

 

여기까지는 구글링하면 맨 위에 뜨는, 정석적인 방법이다. 아마 저 위 두 방법을 사용하면 대부분 문제가 해결될 것이다.

 

하지만 이 글을 쓰게 된 이유는 my.cnf 파일이 없는 경우이다.

 

분명 /etc/mysql/my.cnf 혹은 /etc/my.cnf에 있다고 하는데, 없다... 없다

my.ini

mysqld

 

등등 뭐든 다 찾아봤는데 없다!!!!

그냥 없다...my-small my-big 이런 파일로 있을 수도 있다해서 뒤졌는데 없다...

 

찾아보니 설치하는 방법에 따라 다르다고 한다.

누군가는 brew로 설치했을 것이고, 누구는 .dmg 파일로 설치했을 것인데, 이에 따라 달라지고, my.cnf 파일이 없는 경우가 있다고 한다.

 

그래서 저 위치에 my.cnf를 내가 직접 만들면 되지 않을까?했는데 일단 만들어지지 않는다.

 

sudo 옵션으로 만들어볼까 했지만, mysql이란 폴더가 없는데, 경로 설정이 저길로 안되어 있을 것 같아서 my.cnf를 찾아보기로 했다.

 

 

이걸 위해서 진짜 한참 구글링을 하던 와중 이 글을 보게 되었다.

 

serverfault.com/questions/346647/mysql-wheres-the-my-cnf-path

 

MySQL where's the my.cnf path?

I've managed to locate my install directory for MySQL: /usr/local/mysql/ Where can I find the path to my.cnf to know where I should configure the server? I've tried creating a /etc/my.cnf(as shown

serverfault.com

 

mysql --help | grep "Default options" -A 1

 

이 명령어로 my.cnf 찾을 수 있다고 하는 것이다.

덕분에 찾았다!!! 다른 사람들과는 조금 다른 경로에 있었다

그래서 그 my.cnf 파일을 수정하고 mysql 서버를 껐다 켰지만,, 안된다...

 

이것도 이상한게 사실 mysql 서버 재부팅은 service mysql restart 하면 된다는데, 나는 service라는 명령어를 실행할 수 없다고한다...ㅋㅋㅋ...

디비를 진짜 하나도 모를 때, 설치한 mariaDB라 설치할 때, 정말 많이 잘못 설치한 것 같았다. 아니면 MariaDB라서 그런가...

 

어쨌든 이 방법도 틀렸으니, 이제 다시 문제 탐구를 시작했다.

 

그래서 구글링을 열심히하다가 이 분의 글을 보게 되었다.

 

blog.naver.com/alsdomm/221737364291

 

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option

MySQL에서 load data(또는 select into outfile, load_file()함수)를 사용할 때, 다음과 같은 오류가 ...

blog.naver.com

 

최근 글인데도(2019년) 네이버 블로그에 작성하신게 신기했고, 구글에 네이버 글이 검색된다는 것도 의아했지만, 덕분에 문제를 해결했다.

 

MacOS 설정 -> MySQL -> Configuration에서 해답을 찾을 수 있었다.

MySQL

현재는 맨 위에 Configuration File의 경로가 지정되어 있었지만, 원래는 되어 있지 않았다.

이 Configuration File 부분을 아까 grep으로 찾은 파일로 설정해주니 해결되었다.

 

왜 맨날 나는 CLI로 먼저 끝장을 보려고 하는지 모르겠다.. 다음부터 이렇게 제공해주는 설정부터 보며 문제를 해결해봐야겠다.

 

그리고 아마 구글링을 하다가 흘러흘러 여길로 왔을거라 생각하여, 중간에 생략했지만, my.cnf 파일에

 

[mysqld]

secure-file-priv=""


이것을 추가해주어야 문제가 해결된다! 이건 구글링하면 바로 나오니, 쉽게 해결하실 수 있을 것이라 생각한다.

혹여나 모르겠으면 댓글 남겨주시면 도와드리겠습니다

진짜 오늘 이 문제 때문에 MariaDB 삭제하고 MySQL 설치할까 고민했었는데 해결해서 너무 행복했다...ㅎㅎ

반응형

+ Recent posts