[mysql] 오류 1148 : 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다.

다음을 사용하여 mysql 데이터베이스에 데이터를로드하려고합니다.

LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

이 질문의 주제는 제가받는 답변입니다. 로컬 데이터 오프 로딩은 기본적으로 꺼져 있으며 명령을 사용하여 활성화해야 local-infile=1하지만이 명령을 어디에 배치해야하는지 모르겠습니다.



답변

클라이언트 연결을 설정할 때 추가 옵션으로 지정할 수 있습니다.

mysql -u myuser -p --local-infile somedatabase

그 기능은 보안 허점을 열기 때문입니다. 따라서 실제로 사용하려는 경우 명시 적으로 활성화해야합니다.

클라이언트와 서버 모두 로컬 파일 옵션을 활성화해야합니다. 그렇지 않으면 작동하지 않습니다. 서버 측 서버의 파일에 대해 활성화하려면 my.cnf구성 파일에 다음을 추가 하십시오.

loose-local-infile = 1


답변

여기서 답을 찾았습니다 .

서버 변수 local_infileFALSE | 0으로 설정되어 있기 때문 입니다. 문서 에서 참조 .

다음을 실행하여 확인할 수 있습니다.

SHOW VARIABLES LIKE 'local_infile';

SUPER 권한이있는 경우 다음을 실행하여 활성화 할 수 있습니다 (새 구성으로 서버를 다시 시작하지 않음).

SET GLOBAL local_infile = 1;


답변

http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html

이것을 my.cnf에 넣으십시오. [client]섹션이 이미 있어야합니다 (보안에 대해 너무 걱정하지 않는 경우).

[client]
loose-local-infile=1


답변

이 모든 것이 내 새로운 Ubuntu 15.04에서는 해결되지 않았습니다.

나는 제거하고 LOCAL다음 명령을 얻었습니다.

LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

하지만 다음을 얻었습니다.

MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)

그것은 나를 위해 문제를 해결 한 stackoverflow에 대한 다른 질문에 대한 Nelson 의이 답변으로 이어졌습니다 !


답변

기본 MySQL 커넥터가있는 SpringBoot 2.1

이 문제를 해결하려면 지침을 따르십시오.

1. SET GLOBAL local_infile = 1;

이 전역 변수를 설정하려면 MySQL 문서에 제공된 지침을 따르십시오.
https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html에

2. MySQL 커넥터 문자열 변경

allowLoadLocalInfile = true 예 : jdbc : mysql : // localhost : 3306 / xxxx? useSSL = false & useUnicode = yes & characterEncoding = UTF-8 & allowLoadLocalInfile = true


답변

AWS MySQL 8.0 RDS에서 CSV 파일을 가져 오는 동안 동일한 문제가 발생했습니다.

mysql> LOAD DATA LOCAL INFILE ‘/tmp/your.csv’INTO TABLE test.demo2 FIELDS TERMINATED BY ‘,’ENCLOSED BY ‘ “‘LINES TERMINATED BY ‘\ n’IGNORE 1 LINES;

오류 1148 (42000) : 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다.

1) local_infile매개 변수 확인

mysql> SHOW VARIABLES LIKE 'local_infile';

2) 클라이언트에서 로그 아웃 한 후 아래 매개 변수를 사용하여 다시 로그인합니다.

mysql -u root -p -h rdsendpoint --local-infile=1

3) 동일한 명령 실행

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;


Query OK, 300 rows affected (0.01 sec)

Records: 300  Deleted: 0  Skipped: 0  Warnings: 0


답변

또한 Windows에서 MySQL Workbench 를 사용하여 로컬 머신에서 AWS RDS 인스턴스로 .csv 데이터를 업로드하려고 시도하면서이 문제로 어려움을 겪었습니다 .

필요한 추가 기능 OPT_LOCAL_INFILE=1은 연결> 고급> 기타입니다. 참고 CAPS가 필요합니다.

AWS 개발자 포럼에서 PeterMag의 답변을 찾았습니다 .


추가 정보 :

SHOW VARIABLES LIKE 'local_infile';이미 반환 ON
되었으며 쿼리는 다음과 같습니다.

LOAD DATA LOCAL INFILE 'filepath/file.csv'
    INTO TABLE `table_name`
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;

위에 언급 된 답변 소스에서 복사 :

분명히 이것은 MYSQL Workbench V8.X의 버그입니다. 이 스레드의 앞부분에 표시된 구성 외에도 Workbench에서 다음과 같이 MYSQL 연결을 변경해야합니다.

  1. 모든 연결을 표시하는 MYSQL의 시작 페이지로 이동하십시오.
  2. 서버 연결 관리 (작은 스패너 아이콘)를 선택하십시오.
  3. 연결 선택
  4. 고급 탭 선택
  5. 기타 상자에 OPT_LOCAL_INFILE = 1을 추가합니다.

이제 MYSQL RDS에서 LOAD DATA LOCAL INFILE 쿼리를 사용할 수 있습니다. File_priv 권한이 필요하지 않은 것 같습니다. *