programing

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

goodcopy 2022. 10. 8. 23:05
반응형

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

반응형