IT story

MySQL에서 데이터 infile로드에 대한 액세스가 거부되었습니다.

hot-time 2020. 8. 24. 21:08
반응형

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