Как загрузить данные Infile на Amazon RDS? - PullRequest
33 голосов
/ 29 октября 2009

не уверен, что этот вопрос лучше подходит для сбоя сервера, но я в последнее время связывался с Amazon RDS и не мог получить привилегии 'file' для моего пользователя mysql веб-хоста.

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

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

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

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

Эта страница, 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 ]

88 голосов
/ 10 июня 2010

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

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

--local-infile=1
9 голосов
/ 17 декабря 2012

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

НАГРУЗКА ДАННЫХ МЕСТНЫЙ INFILE ...

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

5 голосов
/ 29 октября 2009

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

mysqldump MYDB | mysql -h rds-amazon-blah.com --user=youruser --pass=thepass
1 голос
/ 29 сентября 2017

Импорт больших объемов данных в 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');
    
1 голос
/ 25 августа 2010

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

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

...