MySQL의 로드 데이터 파일에 대한 액세스가 거부되었습니다.
PHP에서는 항상 MySQL 쿼리를 사용하지만,
LOAD DATA INFILE
다음과 같은 오류가 발생합니다.
#1045 - 사용자 'user'@'localhost'에 대한 액세스가 거부되었습니다(패스워드:YES 사용).
이게 무슨 뜻인지 아는 사람?
저도 방금 이 문제에 부딪혔어요.SQL 스테이트먼트에 추가해야 했습니다.
예를 들어 다음과 같은 권한 문제가 발생합니다.
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
스테이트먼트에 추가하시면 권한 문제가 해소됩니다.다음과 같은 경우:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
이런 문제가 있었어요.여기저기 찾아봤지만 만족스러운 답을 찾지 못했다.검색 결과를 아래에 요약합니다.
access denied 오류는 다음을 의미합니다.
- user'@'localhost')이 .
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 권한이 있는지 확인하십시오.
공유 웹 호스팅을 사용하는 경우 호스팅 공급자에 의해 차단될 수 있습니다.
명령줄을 사용하는 경우 쉬운 것을 찾았습니다.
그로로 mysql -u[username] -p[password] --local-infile
SET GLOBAL local_infile = 1;
를 합니다.use [db_name]
LOAD DATA LOCAL INFILE 'C:\\Users\\shant\\Downloads\\data-1573708892247.csv' INTO TABLE visitors_final_test FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
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();
같은 문제가 발생하여 다음 절차에 따라 해결합니다.
- activate load_infile 변수
- 사용자 지정 mysql 사용자에 대한 grand file 권한
- deactivate secure_file_priv 변수(내 파일은 웹 서버에 의해 myslq /var/lib/security-file의 시큐어 디렉토리가 아닌 /tmp 폴더에 업로드되었습니다)
이 세 번째 포인트에 대해서는http://https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv 를 참조해 주세요.
BR,
AD
저도 같은 일이 있어서, Yamir가 투고에서 설명한 모든 절차를 따랐지만, 제대로 되지 않았습니다.
파일은 777개의 권한을 가진 /tmp/test.csv에 있습니다.MySQL 사용자에게 파일 권한이 있고 MySQL 버전에서는 LOCAL 옵션이 허용되지 않아 꼼짝할 수 없었습니다.
마침내 다음 작업을 수행하여 문제를 해결할 수 있었습니다.
sudo chown mysql:mysql /tmp/test.csv
MySQL Workbench에서 테스트하는 경우
connections -> edit connection -> advanced 탭을 선택합니다.
추가하다OPT_LOCAL_INFILE=1
'기타' 텍스트 필드에 입력합니다.
이제 연결을 다시 시작하고 시도하십시오.
MySQL 테이블 로딩이 빠르고 간편하다는 것을 알게 되었습니다(python / Django 모델 매니저 스크립트를 사용하고 있었습니다).
1) 모든 열이 VARCHAR(n) NULL인 테이블을 만듭니다. 예:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) csv에서 헤더(첫줄)를 삭제하고 로드합니다(LOCAL을 잊어버린 경우 "#1045 - 사용자 'user'@'localhost" (패스워드 사용: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) 열을 변경합니다.
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
와아아!
이것은 아마도 당신이 제공한 패스워드가'user'@'localhost'
틀렸습니다.
언급URL : https://stackoverflow.com/questions/2221335/access-denied-for-load-data-infile-in-mysql
'programing' 카테고리의 다른 글
Java 스위치 문: 상수 표현이 필요하지만 IS 상수입니다. (0) | 2022.10.27 |
---|---|
JVM이 JIT 컴파일 코드를 캐시하지 않는 이유는 무엇입니까? (0) | 2022.10.27 |
yield()의 주요 용도는 무엇이며 join() 및 interrupt()와는 어떻게 다릅니까? (0) | 2022.10.08 |
사전을 JSON으로 변환하는 중 (0) | 2022.10.08 |
MariaDB에서 생성된 열 정의의 사용자 정의 함수? (0) | 2022.10.08 |