MySQL에서 LOAD DATA LOCAL INFILE이란?
MySQL에서 LOAD DATA LOCAL INFILE 구문은 클라이언트 측의 CSV나 텍스트 파일을 데이터베이스 테이블로 빠르게 가져올 수 있게 해주는 매우 유용한 기능입니다. 하지만 보안상의 이유로 이 기능은 기본적으로 비활성화(OFF)되어 있습니다.
서버 측에서는 SET 명령어에 GLOBAL 옵션을 사용하여 이 기능을 손쉽게 활성화할 수 있습니다.
1. 현재 local_infile 상태 확인하기
먼저 현재 local_infile 변수가 켜져 있는지 확인해 보겠습니다. 아래는 확인 문법입니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
실행 결과는 다음과 같습니다.
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | OFF | +---------------+-------+ 1 row in set (0.01 sec)
처음에는 위와 같이 local_infile이 OFF 상태로 되어 있는 것을 확인할 수 있습니다.
2. SET GLOBAL 명령어로 활성화하기
local_infile은 문자열 'ON', 불리언 값 true, 또는 숫자 값 1 중 어느 것이든 사용하여 활성화할 수 있습니다. 세 가지 방법 모두 동일하게 작동합니다.
mysql> SET GLOBAL local_infile = 'ON'; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL local_infile = 1; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL local_infile = true; Query OK, 0 rows affected (0.00 sec)
3. 활성화 여부 다시 확인하기
MySQL 8.0.12 버전 기준으로 설정이 정상적으로 적용되었는지 다시 한번 확인해 보겠습니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
실행 결과는 다음과 같습니다.
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | ON | +---------------+-------+ 1 row in set (0.00 sec)
이제 local_infile이 ON으로 변경된 것을 볼 수 있습니다.
4. my.cnf 설정 파일에 영구 적용하기
SET GLOBAL 명령어는 MySQL 서버를 재시작하면 초기화됩니다. 따라서 재시작 후에도 설정을 유지하려면 my.cnf(또는 Windows의 경우 my.ini) 설정 파일에 직접 추가해야 합니다.
[mysqld] local_infile=1 [client] local-infile=1
- [mysqld] 섹션: 서버 측에서 로컬 파일 로딩을 허용합니다.
- [client] 섹션: mysql 클라이언트 실행 시 자동으로
--local-infile=1옵션이 적용됩니다.
설정 파일 수정 후에는 MySQL 서버를 재시작하면 local_infile이 ON 상태로 유지됩니다.
참고 사항
클라이언트에서 접속할 때도 해당 옵션이 필요할 수 있습니다. 커맨드 라인에서 접속 시 아래와 같이 옵션을 지정하세요.
mysql --local-infile=1 -u 사용자명 -p
또한 PHP, Python 등의 드라이버를 사용하는 경우에도 각 드라이버별로 LOCAL_INFILE 관련 옵션을 활성화해야 정상적으로 동작합니다.