programing

아마존 RDS에서 '파일에 데이터를 로드'하는 방법?

skycolor 2023. 10. 4. 21:07
반응형

아마존 RDS에서 '파일에 데이터를 로드'하는 방법?

이것이 서버 장애에 더 적합한 질문인지 확실하지 않지만 최근에 아마존 RDS를 엉망으로 만들고 웹 호스트 mysql 사용자에게 '파일' 권한을 얻는 데 어려움을 겪고 있었습니다.

간단하다고 생각합니다.

grant file on *.* to 'webuser@'%';

작동하지만 작동하지 않으며 '루트' 사용자와도 할 수 없는 것 같습니다.왜 그러고 있어?로드 데이터를 사용하는 이유는 수천 개의 삽입을 한 번에 수행하는 데 매우 빠르기 때문입니다.

이 문제를 해결하는 방법을 아는 사람이 있습니까? 아니면 다른 방법을 찾아야 합니까?

페이지인 http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html?Concepts.DBInstance.html 은 제가 이 문제를 해결할 다른 방법을 찾아야 한다고 제안하는 것 같습니다.

도와줘요?

업데이트 데이터베이스를 가져오려는 것이 아니라 파일 로드 옵션을 사용하여 한 번에 수십만 행을 삽입하고자 합니다.

이것을 파헤친 후에 우리는 이것을 가지고 있습니다.

 mysql> grant file on *.* to 'devuser'@'%';
 ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)


 mysql> select User, File_priv, Grant_priv, Super_priv from mysql.user;
 +----------+-----------+------------+------------+
 | User     | File_priv | Grant_priv | Super_priv |
 +----------+-----------+------------+------------+
 | rdsadmin | Y         | Y          | Y          |
 | root     | N         | Y          | N          |
 | devuser  | N         | N          | N          |
 +----------+-----------+------------+------------+

를 해야 합니다.LOAD DATA LOCAL INFILE파일이 MySQL 서버에 있는 것이 아니라 명령을 실행 중인 시스템에 있기 때문입니다.

아래 설명에 따라 플래그도 포함해야 합니다.

--local-infile=1

무슨 가치가 있건 간에...LOCAL고 LOAD DATA INFILE다를 할 수 .mysqlimport이 문제를 해결하기 위해서 입니다.

데이터 로컬 파일 로드...

파일 권한을 부여하지 않고도 작동합니다.

또한 윈도우의 MySQL Workbench를 사용하여 로컬 머신에서 AWS RDS 인스턴스에 .csv 데이터를 업로드하려고 시도하면서 이 문제로 어려움을 겪었습니다.

한 것은 이었습니다를 이었습니다.OPT_LOCAL_INFILE=1> >n :> >참고로 CAPS가 필요했습니다.

저는 AWS 개발자 포럼에서 피터매그의 이 답변을 찾았습니다.


자세한 정보:

SHOW VARIABLES LIKE 'local_infile';dON질문은 다음과 같습니다.

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 Connection을 다음과 같이 변경해야 합니다.

  1. 모든 연결을 표시하는 MYSQL의 시작 페이지로 이동합니다.
  2. 서버 연결 관리(작은 스패너 아이콘)를 선택합니다.
  3. 연결을 선택합니다.
  4. 고급 탭 선택
  5. 기타 상자에서 OPT_LOCAL_INFILE=1을 추가합니다.

이제 MYSQL RDS에서 LOAD DATA LOCAL INFILE 쿼리를 사용할 수 있습니다. File_priv 권한이 필요하지 않은 것 같습니다.*

RDS로 최고 수준의 MySQL 권한을 가지고 있지 않기 때문에 아직은 할 수 없습니다. 우리는 약간의 테스트만 했지만 데이터베이스를 가져오는 가장 쉬운 방법은 소스 상자에서 파이프링하는 것입니다.

mysqldump MYDB | mysql -h rds-amazon-blah.com --user=youruser --pass=thepass

대량 데이터를 Amazon MySQL RDS로 가져오는 것은 두 가지 방법으로 가능합니다.아래 중 편하신 분을 선택하시면 됩니다.

  1. Import 유틸리티를 사용합니다.

    mysqlimport --local --compress  -u <user-name> -p<password> -h <host-address> <database-name> --fields-terminated-by=',' TEST_TABLE.csv
    --Make sure, here the utility will be inserting the data into TEST_TABLE only.
    
  2. mysql 명령어로 piping하여 대량 삽입 SQL을 보냅니다.

    mysql -u <user-name> -p<password> -h <host-address> <database-name> < TEST_TABLE_INSERT.SQL
    --Here file TEST_TABLE_INSERT.SQL will have bulk import sql statement like below
    --insert into TEST_TABLE values('1','test1','2017-09-08'),('2','test2','2017-09-08'),('3','test3','2017-09-08'),('3','test3','2017-09-08');
    

저도 비슷한 문제에 부딪혔습니다.데이터베이스를 가져오려고 했지만 조건은 똑같아야 합니다. 일부 테이블의 크기와 얼룩이 많은 연결, 그리고 간단한 이력서 기능을 원하기 때문에 로드 데이터를 사용해야 했습니다.

로컬 옵션을 지정하지 않으면 오류가 발생할 수 있다는 Chris finne의 의견에 동의합니다.여러 번의 적합과 시작 끝에 Matkit의 mk-parallel-restore 툴이 필요한 것과 뛰어난 추가 기능을 제공한다는 것을 알게 되었습니다.그것은 당신의 사용 사례에 아주 잘 어울릴 것입니다.

언급URL : https://stackoverflow.com/questions/1641160/how-to-load-data-infile-on-amazon-rds

반응형