MySQL에서 데이터 infile로드에 대한 액세스가 거부되었습니다.
PHP에서 항상 MySQL 쿼리를 사용하지만 LOAD DATA INFILE을 시도하면 다음 오류가 발생합니다 #1045 - Access denied for user 'user'@'localhost' (using password: YES)
. 누구든지 이것이 의미하는 바를 알고 있습니까?
이 문제도 만났습니다. SQL 문에 "LOCAL"을 추가해야했습니다.
예를 들어 다음은 권한 문제를 제공합니다. LOAD DATA INFILE '{$file}' INTO TABLE {$table}
문에 "LOCAL"을 추가하면 권한 문제가 해결됩니다. 이렇게 :
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
나는이 문제가 있었다. 나는 주변을 뒤져 보았지만 만족스러운 답을 찾지 못했습니다. 내 검색 결과를 아래에 요약합니다.
액세스 거부 오류는 다음을 의미 할 수 있습니다.
- 'user'@ 'localhost'에는 FILE 권한 (
GRANT FILE on *.* to user@'localhost'
) 이 없습니다 . 또는, - 로드하려는 파일이 mysql 서버를 실행하는 머신에 존재하지 않습니다 (LOAD DATA INFILE을 사용하는 경우). 또는,
- 로드하려는 파일이 로컬 시스템에 존재하지 않습니다 (LOAD DATA LOCAL INFILE을 사용하는 경우). 또는,
- 로드하려는 파일이 전 세계에서 읽을 수 없습니다 (전 세계에서 읽을 수 있으려면 파일 과 모든 상위 디렉토리가 필요합니다 . chmod 755 디렉토리, chmod 744 file.dat)
다음 명령을 사용해보십시오.
load data local infile 'home/data.txt' into table customer;
작동합니다. 제 경우에는 효과가있었습니다.
MySQL 사용자에게 FILE 권한이 부여되었는지 확인하십시오.
공유 웹 호스팅을 사용중인 경우 호스팅 제공 업체가이를 차단할 가능성이 있습니다.
Lyon의 문자열은 저에게 아주 좋은 팁을주었습니다. Windows에서는 백 슬래시가 아닌 슬래시를 사용해야합니다. 이 코드는 나를 위해 작동합니다.
File tempFile = File.createTempFile(tableName, ".csv");
FileUtils.copyInputStreamToFile(data, tempFile);
JdbcTemplate template = new JdbcTemplate(dataSource);
String path = tempFile.getAbsolutePath().replace('\\', '/');
int rows = template.update(MessageFormat
.format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
path, tableName));
logger.info("imported {} rows into {}", rows, tableName);
tempFile.delete();
동일한 문제가 발생하여 다음 단계를 수행하여 해결했습니다.
- load_infile 변수 활성화
- 내 사용자 정의 mysql 사용자에게 그랜드 파일 권한
- secure_file_priv 변수 비활성화 (내 파일은 웹 서버에 의해 myslq / var / lib / mysql-file의 보안 디렉토리가 아닌 / tmp 폴더에 업로드되었습니다)
이 세 번째 지점에 대해서는 https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv를 참조하십시오.
BR,
기원 후
이것은 나에게도 일어 났고 Yamir가 그의 게시물에서 설명한 모든 단계를 따랐음에도 불구하고 작동하도록 만들 수 없었습니다.
파일은 777 권한으로 /tmp/test.csv에 있습니다. MySQL 사용자에게 파일 권한이 있고 MySQL 버전에서 LOCAL 옵션이 허용되지 않아서 멈췄습니다.
마지막으로 다음을 실행하여 문제를 해결할 수있었습니다.
sudo chown mysql:mysql /tmp/test.csv
MySQL 테이블을로드하는 것이 빠르고 고통스럽지 않다는 것을 발견했습니다 (python / Django 모델 관리자 스크립트를 사용했습니다).
1) 모든 열이 VARCHAR (n) NULL 인 테이블 만들기 예 :
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) remove headers (first line) from csv, then load (if you forget the LOCAL, you’ll get “#1045 - Access denied for user 'user'@'localhost' (using password: YES)”):
mysql> LOAD DATA LOCAL INFILE "/home/magula6/cogswatch2/well2.csv" INTO TABLE cw_well2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' -> ; Query OK, 119426 rows affected, 19962 warnings (3.41 sec)
3) alter columns:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!
It probably means that the password you supplied for 'user'@'localhost'
is incorrect.
참고URL : https://stackoverflow.com/questions/2221335/access-denied-for-load-data-infile-in-mysql
'IT story' 카테고리의 다른 글
iframe에 100 % 높이를 부여하는 방법 (0) | 2020.08.24 |
---|---|
.class 용 Java 동기화 블록 (0) | 2020.08.24 |
헤 로쿠 문제에 앱 푸시 (0) | 2020.08.24 |
bower 종속성에 사용 가능한 버전을 찾는 방법 (0) | 2020.08.23 |
Xcode 변수 (0) | 2020.08.23 |