728x90
에러 상황
사용자가 도서를 등록할 때, 도서 제목만 입력해도 관련 도서명이 검색되도록 하고 싶었다.
도서 DB가 필요했다.
도서 목록은 알라딘 등 다양한 도서 구매 사이트에서 엑셀로 제공해주었다.
엑셀 파일을 csv파일로 바꾸고 doker에 등록해둔 mysql로 도서 DB를 넣고자 했다.
먼저 파일에 대한 테이블을 만들고 이 안에 데이터를 넣으면 된다.
CREATE TABLE book (
PRIMARY KEY (순번),
순번 INT,
구분 VARCHAR(20),
상품명 VARCHAR(255),
ItemId VARCHAR(20),
ISBN13 VARCHAR(20),
부가기호 VARCHAR(20),
저자 VARCHAR(100),
출판사 VARCHAR(100),
출간일 DATE,
정가 VARCHAR(100),
판매가 VARCHAR(100),
대표분류_대분류명 VARCHAR(100),
대표분류_영문명 VARCHAR(100)
);
csv파일을 테이블에 넣기 위해 변환한다.
LOAD DATA INFILE '/test//Aladin_Weekly_Best_Sellers_Domestic_Books_20240502.csv'
INTO TABLE book
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
--secure-file-priv 옵션에 의한 에러가 발생했다.
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
에러 해결
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
이와 같은 에러는 --secure-file-priv
옵션이 MySQL 서버가 파일을 읽거나 쓸 수 있는 디렉토리를 제한하기 때문에 발생한다고 한다.
SHOW VARIABLES LIKE 'secure_file_priv';
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
secure_file_priv 가 가리키는 Value 필드를 보면 /var/lib/mysql-files/ 와 같이 디렉토리 형식으로 출력이 된 것을 볼 수 있는데, 이 디렉토리가 secure_file_priv 옵션이 허용한 MySQL 서버가 읽고 쓸 수 있는 디렉토리이다.
즉, INTO OUTPUT 문 다음의 디렉토리를 이 곳으로 쓰면 된다.
쿼리문에서 추출할 디렉토리를 secure_file_priv 가 허용하는 곳으로 변경하면 된다.
해결 후 쿼리문
# 💡 경로를 secure_file_pric가 허용하는 곳으로 변경해주었다."/var/lib/mysql-files"
LOAD DATA INFILE '/var/lib/mysql-files//Aladin_Weekly_Best_Sellers_Domestic_Books_20240502.csv'
INTO TABLE book
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
해결 전 쿼리문
# /test 을 바꿔주었다.
LOAD DATA INFILE '/test//Aladin_Weekly_Best_Sellers_Domestic_Books_20240502.csv'
INTO TABLE book
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
참고링크