오류 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_infile
가 FALSE | 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
약간의 추가.
mysql.connector 버전 8.0.16에서 또 다른 환생을 찾았습니다. 이제 allow_local_infile = True 가 필요합니다. 그렇지 않으면 위의 오류가 표시됩니다. 이전 버전에서 작업했습니다.
conn = mysql.connector.connect(host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)
MySQL 8.0 참조 설명서 -6.1.6 LOAD DATA LOCAL의 보안 문제 참조
서버 측에서 다음을 실행하십시오.
mysql.server start --local-infile
클라이언트 측에서
mysql --local-infile database_name -u username -p
최고의 답변이 맞습니다. 먼저 MySQL CLI에서 직접 확인하십시오. 이것이 문제를 해결한다면 Python3에서 작동하도록하고 싶을 수도 있습니다. MySQLdb.connect
as 매개 변수에 전달하기 만하면 됩니다.
self.connection = MySQLdb.connect(
host=host, user=settings_DB.db_config['USER'],
port=port, passwd=settings_DB.db_config['PASSWORD'],
db=settings_DB.db_config['NAME'],
local_infile=True)
docker [1]을 사용할 때 데이터를로드하는 동안이 오류가 발생했습니다. 이 다음 단계를 수행 한 후에 솔루션이 작동했습니다. 처음에는 데이터베이스와 테이블 datavault
및 fdata
. 데이터 가져 오기 [2]를 시도 할 때 오류 [3]가 발생했습니다. 그런 다음
SET GLOBAL local_infile = 1;
- 사용 확인
SHOW VARIABLES LIKE 'local_infile';
- Then I restarted my mysql session:
mysql -P 3306 -u required --local-infile=1 -p
, see [4] for user creation. - I recreated my table as this solved my problem:
use datavault;
drop table fdata;
CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
- Finally I imported the data using [2].
For completeness, I would add I was running the mysql version inside the container via docker exec -it testdb sh
. The mysql version was mysql Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL). This was also tested with mysql.exe Ver 14.14 Distrib 5.7.14, for Win64 (x86_64) which was another version of mysql from WAMP64. The associated commands used are listed in [5].
[1] docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
[2] load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;
[3] ERROR 1148 (42000): The used command is not allowed with this MySQL version
[4] The required client was created using:
CREATE USER 'required'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
FLUSH PRIVILEGES;
- You might need this line
ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
if you run into this error:Authentication plugin ‘caching_sha2_password’ cannot be loaded
[5] Commands using mysql from WAMP64:
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1
where the port is thee mapped port into the host as described bydocker ps -a
and the host ip was optained usingdocker-machine ip
(This depends on OS and possibly Docker version).- Create database datavault2 and table fdata as described above
load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
- For my record, this other alternative to load the file worked after I have previously created datavault3 and fdata:
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
and it successfully loaded the data easily checked after runningselect * from fdata limit 10;
.
ReferenceURL : https://stackoverflow.com/questions/18437689/error-1148-the-used-command-is-not-allowed-with-this-mysql-version
'code' 카테고리의 다른 글
콘텐츠가 AJAX를 통해로드 된 후 jQuery가 작동하지 않음 (0) | 2020.12.27 |
---|---|
AssertionError : 뷰 함수 매핑이 기존 끝점 함수를 덮어 씁니다 : main (0) | 2020.12.27 |
Apache POI를 사용하여 Excel에서 셀 병합 (0) | 2020.12.27 |
React는 자동 완성을 렌더링하지 않습니다. (0) | 2020.12.27 |
가장 최근 레코드를 검색하는 SQL 쿼리 만들기 (0) | 2020.12.27 |