다음을 사용하여 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=1
하고 서버 서비스를 다시 시작했습니다. 또한 --local-infile dbname
옵션을 사용 하여 클라이언트를 실행했습니다 mysql -u root -p --local-infile mydatabase
.
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
이 문제를 해결하려면 지침을 따르십시오.
이 전역 변수를 설정하려면 MySQL 문서에 제공된 지침을 따르십시오. https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html에
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 연결을 변경해야합니다.
- 모든 연결을 표시하는 MYSQL의 시작 페이지로 이동하십시오.
- 서버 연결 관리 (작은 스패너 아이콘)를 선택하십시오.
- 연결 선택
- 고급 탭 선택
- 기타 상자에 OPT_LOCAL_INFILE = 1을 추가합니다.
이제 MYSQL RDS에서 LOAD DATA LOCAL INFILE 쿼리를 사용할 수 있습니다. File_priv 권한이 필요하지 않은 것 같습니다. *
docker [1]을 사용할 때 데이터를로드하는 동안이 오류가 발생했습니다. 이 다음 단계를 수행 한 후에 솔루션이 작동했습니다. 처음에는 데이터베이스와 테이블 datavault
및 fdata
. 데이터 가져 오기 [2]를 시도 할 때 오류 [3]가 발생했습니다. 그런 다음
SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
mysql -P 3306 -u required --local-infile=1 -p
. 사용자 생성은 [4]를 참조하십시오.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));
완전성을 위해 .NET을 통해 컨테이너 내부에서 mysql 버전을 실행하고 있다고 추가 docker exec -it testdb sh
합니다. mysql 버전은 x86_64의 Linux 용 mysql Ver 8.0.17 (MySQL Community Server-GPL) 이었습니다. 이것은 또한 WAMP64 의 mysql의 또 다른 버전 인 Win64 (x86_64)에 대해 mysql.exe Ver 14.14 Distrib 5.7.14로 테스트되었습니다 . 사용 된 관련 명령은 [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] 오류 1148 (42000) : 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다.
[4] 필요한 클라이언트는 다음을 사용하여 생성되었습니다.
CREATE USER 'required'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
FLUSH PRIVILEGES;
ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
하면 다음 줄이 필요할 수 있습니다 .Authentication plugin ‘caching_sha2_password’ cannot be loaded
[5] WAMP64에서 mysql을 사용하는 명령 :
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1
여기서 포트는에서 설명한대로 호스트에 매핑 된 포트 docker ps -a
이고 호스트 IP는 다음을 사용하여 획득 docker-machine ip
되었습니다 (OS 및 가능하면 Docker 에 따라 다름). 버전 ).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';
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"
그것은 성공적으로 쉽게 실행 한 후 확인 데이터를로드 select * from fdata limit 10;
.MySQL 8.0 Reference Manual- 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)