3948: Loading local data is disabled; this must be enabled on both the client and server sides (로컬 데이터 로드가 비활성화됨. 클라이언트와 서버 양쪽에서 활성화 필요)
MySQL의미
LOAD DATA LOCAL INFILE로 클라이언트 측 파일에서 데이터를 로드하려 했지만 클라이언트 및/또는 서버 측에서 기능이 비활성화되어 있다. 보안상 MySQL 8에서는 LOCAL이 기본적으로 비활성화되어 있다.
원인
서버에서 local_infile 시스템 변수가 OFF이거나 클라이언트 드라이버가 LOCAL INFILE을 활성화하지 않았다. 악의적인 서버가 클라이언트 파일을 읽을 수 있으므로 이 기능은 기본적으로 제한된다.
해결 방법
정말 필요하다면 양쪽에서 활성화한다: 서버에서 SET GLOBAL local_infile = 1; 클라이언트에서는 드라이버의 LOCAL INFILE 플래그를 활성화한다(예: allowLoadLocalInfile 연결 옵션 / --local-infile=1). 보안 측면에서는 파일을 서버에 두고 LOCAL 없이 LOAD DATA INFILE을 사용하거나 대량 INSERT/import 도구를 사용하는 것이 바람직하다. 작업이 끝나면 local_infile을 다시 비활성화한다.
같은 데이터베이스의 다른 항목
- 1194Table 'name' is marked as crashed and should be repaired (테이블이 crashed로 표시되어 복구 필요)
- 1615Prepared statement needs to be re-prepared (prepared statement 재준비 필요)
- 1553Cannot drop index needed in a foreign key constraint (외래 키 제약 조건에 필요한 인덱스 삭제 불가)
- 1075Incorrect table definition; there can be only one auto column and it must be defined as a key (잘못된 테이블 정의. auto 컬럼은 하나만 가능하며 키로 정의해야 함)
- 1055Expression not in GROUP BY (only_full_group_by) (GROUP BY에 없는 표현식)
- 1267Illegal mix of collations
- 1030Got error N from storage engine