Подтвердить что ты не робот

Как "загружать данные infile" на amazon RDS?

Не уверен, что это вопрос, который лучше подходит для serverfault, но я в последнее время возился с amazon RDS и испытывал трудности с получением привилегий "файла" для моего пользователя mysql веб-хоста.

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

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

будет работать, но это не так, и я не могу сделать это с моим "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          |
 +----------+-----------+------------+------------+
4b9b3361

Ответ 1

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

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

--local-infile=1

Ответ 2

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

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

Ответ 3

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

LOAD DATA LOCAL INFILE...

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

Ответ 4

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

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

Ответ 5

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

  • Использование утилиты импорта.

    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.
    
  • Отправка массивной вставки 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');