Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 LOAD DATA LOCAL INFILE 활성화 방법 – SET 명령어와 my.cnf 설정까지

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_infileOFF 상태로 되어 있는 것을 확인할 수 있습니다.

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_infileON으로 변경된 것을 볼 수 있습니다.

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 관련 옵션을 활성화해야 정상적으로 동작합니다.