Как "загружать данные 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 |
+----------+-----------+------------+------------+
Ответы
Ответ 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');