2009-10-29 5 views
28

이 것이 serverfault에 더 적합한 질문인지는 모르겠지만 요즘에는 아마존 RDS를 망치고 있으며 웹 호스트 mysql 사용자에게 '파일'권한을 부여하는 데 문제가있었습니다.아마존 RDS에서 'infile'데이터를로드하는 방법?

grant file on *.* to '[email protected]'%'; 

가 작동 것이지만, 그렇지 않습니다와 나뿐만 아니라 내 '루트'사용자와 함께 할 수없는 것 :

나는 간단한 가정 것입니다. 뭐라 구요? 로드 데이터를 사용하는 이유는 한 번에 수천 개의 삽입 작업을 수행하기 때문에 초고속이기 때문입니다.

누구든지이 문제를 해결하는 방법을 알고 있거나 다른 방법을 찾아야합니까?

이 페이지는 http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html?Concepts.DBInstance.html입니다.이 문제를 해결하려면 다른 방법을 찾아야합니다.

도움 말?

업데이트 데이터베이스를 가져 오려고하지 않습니다. 파일로드 옵션을 사용하여 한 번에 수십만 개의 행을 삽입하려고합니다. 당신은 RDS와 최고 수준의 MySQL의 권한이없는 같이

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   | 
+----------+-----------+------------+------------+ 

답변

5

는 확신 당신은 아직 할 수 없습니다 :이 문제를 파고 후

우리가 가진 것입니다. 우리는 단지 약간의 테스트를 수행했지만, 데이터베이스를 가져 오는 가장 쉬운 방법은 소스 상자에서 소스 코드를 파이프하는 것입니다.

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

예치은 ...하지만 난 그냥 한 번에 몇 천 제표에 몇 백을로드하기 위해 노력하고있어 - 정말 그때 준비된 문을 실행할 거라고 DB – eyberg

+0

을로드 할 수 없습니다 - 그것은 오래 걸리지 않을 것이다 :) –

79

당신은 파일이 MySQL 서버에없는,하지만 당신은에서 명령을 실행하는 컴퓨터에 그대로 LOAD DATA LOCAL INFILE를 사용해야합니다. 나는 비슷한 문제로 실행

--local-infile=1 
+2

이것은 내가 할 필요가있는 것이었다, 고마워! – favo

+0

이 성능은 좋은 것입니다. – mcmillab

+11

또한 mysql 클라이언트에서 --local-infile = 1 플래그를 사용해야합니다. 그렇지 않으면 "ERROR 1148 (42000) : 사용 된 명령이이 MySQL 버전에서 허용되지 않습니다." –

0

: 당신은 또한 플래그를 포함해야합니다 아래에 의견을 당으로

. 실제로 데이터베이스를 가져 오려고했지만 조건은 동일해야합니다. 일부 테이블의 크기, 얼룩진 연결 및 겸손한 재개 기능에 대한 요구로 인해로드 데이터를 사용해야했습니다.

나는 로컬 옵션을 지정하지 않으면 해당 오류가 발생할 수 있다는 chris finne에 동의합니다. 많은 적합성과 시작 후에 나는 Maatkit의 mk-parallel-restore 툴이 내가 몇 가지 훌륭한 추가 기능을 필요로한다는 것을 발견했다. 그것은 당신의 유스 케이스에 대한 큰 일치 수 있습니다.

+0

매우 멋진 도구! – eyberg

6

무엇이든간에 ...이 문제를 해결하기 위해 mysqlimport을 사용하는 대신 LOCAL 피연산자를 LOAD DATA INFILE에 추가 ​​할 수 있습니다.

LOAD 데이터 LOCAL INFILE ...

이것은 FILE 권한을 부여하지 않고 작동합니다.

0

Amazon 데이터베이스로 대량 데이터 가져 오기는 두 가지 방법으로 가능합니다. 당신은 당신의 편의에 따라 아래의 사람을 선택할 수 있습니다.

  1. 가져 오기 유틸리티 사용

    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의 명령에로 파이프하여 대량 삽입 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');