2009-10-29 2 views
28

не уверен, что это вопрос, который лучше подходит для serverfault, но я в последнее время возился с amazon RDS и испытывал трудности с получением привилегий «файла» моему пользователю веб-хостинга mysql.Как загружать данные infile 'на amazon RDS?

Я бы предположить, что простое:

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

будет работать, но это не делает, и я не могу сделать это с моим пользователем «корень», а также. Что дает? Причина, по которой мы используем данные загрузки, заключается в том, что она супер супер быстро для выполнения тысяч вставок сразу.

Кто-нибудь знает, как исправить это или мне нужно найти другой способ?

Эта страница, http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html?Concepts.DBInstance.html, кажется, предполагает, что мне нужно найти другой способ обойти это.

Помощь?

UPDATE Я не пытаюсь импортировать базу данных - я просто хочу, чтобы использовать опцию загрузки файла, чтобы вставить несколько сотен тысяч строк за раз.

после копаться это то, что мы имеем:

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

Довольно, что вы не можете сделать это все же, как вы не имеют самые высокие привилегии уровня MySQL с поддержкой RDS. Мы провели только небольшое тестирование, но самый простой способ импортировать базу данных, похоже, состоит в том, чтобы передать ее из исходного кода, например.

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

Yeh ... но я просто пытаюсь загрузить пару сот до нескольких тысяч заявлений сразу - на самом деле не загружать БД – eyberg

+0

я запускать их с заранее подготовленным заявлением затем - это не займет много времени :) –

79

Вы должны использовать LOAD DATA LOCAL INFILE как файл не находится на сервере MySQL, но на машине вы работаете в команде.

В соответствии с комментарием ниже вы можете также необходимо включить флаг:

--local-infile=1 
+2

вот что мне нужно было сделать, спасибо! – favo

+0

является результатом этого так хорошо, как вы получите? – mcmillab

+11

Вам также нужно использовать флаг -local-infile = 1 на клиенте mysql, иначе вы получите «ERROR 1148 (42000): используемая команда не допускается с этой версией MySQL» –

0

я столкнулся с подобными проблемами. Я на самом деле пытался импортировать базу данных, но условия должны быть одинаковыми - мне нужно было использовать данные загрузки из-за размера некоторых таблиц, пятнистого соединения и стремления к скромному возобновлению работы.

Я согласен с chris finne, что не указание локального варианта может привести к этой ошибке. После многих приемов и запусков я обнаружил, что инструмент mk-parallel-restore от Maatkit обеспечил то, что мне нужно, с некоторыми превосходными дополнительными функциями. Это может быть отличным вариантом для вашего случая использования.

+0

очень классные инструменты! – eyberg

6

Для чего это стоит ... Вы можете добавить LOCAL-операнд в LOAD DATA INFILE вместо mysqlimport, чтобы обойти эту проблему.

LOAD DATA LOCAL INFILE ...

Это будет работать без предоставления прав доступа к файлам.

0

Импорт сыпучих данных в Amazon MySQL RDS возможен двумя способами. Вы можете выбрать любого ниже, как вам удобно.

  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. Отправка массовой вставки SQL путем соединения в команду mysql.

    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'); 
    
Смежные вопросы