2009-10-29 21 views
28

no estoy seguro de si esta es una pregunta más adecuada para serverfault pero he estado jugando con Amazon RDS últimamente y estaba teniendo problemas para obtener privilegios de 'archivo' para mi usuario de host web mysql.cómo 'cargar el archivo de datos' en Amazon RDS?

Me asumir que un simple:

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

iba a funcionar pero no es así y me parece que no puede hacerlo con mi usuario 'root' también. ¿Lo que da? La razón por la que usamos datos de carga es porque es superrápida para hacer miles de insertos a la vez.

¿Alguien sabe cómo remediar esto o necesito encontrar una manera diferente?

Esta página, http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html?Concepts.DBInstance.html parece sugerir que tengo que encontrar una forma diferente de evitar esto.

¿Ayuda?

ACTUALIZACIÓN No estoy tratando de importar una base de datos - Sólo quiero usar la opción de carga de archivos para insertar varios cientos mil filas a la vez.

después de cavar en torno a esto es lo que tenemos:

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

Respuesta

5

bastante seguro de que no puede hacerlo, sin embargo, ya que no tiene el más alto nivel de privilegios de MySQL con RDS. Solo hemos realizado algunas pruebas, pero la forma más sencilla de importar una base de datos parece ser canalizarlo desde el cuadro fuente, p.

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

Yeh ... pero estoy tratando de cargar un par de cientos a un par de miles declaraciones a la vez - en realidad no cargar una base de datos – eyberg

+0

había corrido con una declaración preparada entonces - no tomará mucho tiempo :) –

79

Es necesario utilizar LOAD DATA LOCAL INFILE que el archivo no está en el servidor MySQL, pero es en la máquina que está ejecutando el comando desde.

Según comentarios a continuación también puede ser necesario incluir la bandera:

--local-infile=1 
+2

esto era lo que tenía que hacer, ¡gracias! – favo

+0

es el rendimiento de esto tan bueno como usted obtendrá? – mcmillab

+11

También necesita usar el indicador --local-infile = 1 en el cliente mysql, de lo contrario obtendrá "ERROR 1148 (42000): El comando utilizado no está permitido con esta versión de MySQL" –

0

me encontré con problemas similares. De hecho, estaba tratando de importar una base de datos, pero las condiciones deberían ser las mismas: necesitaba usar datos de carga debido al tamaño de algunas tablas, una conexión irregular y el deseo de una funcionalidad de reanudación modesta.

Estoy de acuerdo con chris finne que no especificar la opción local puede provocar ese error. Después de muchos accesos y arranques, descubrí que la herramienta mk-parallel-restore de Maatkit proporcionaba lo que necesitaba con excelentes características adicionales. Puede ser una gran coincidencia para su caso de uso.

+0

herramientas muy interesantes! – eyberg

6

Para cualquier cosa que valga la pena ... Puede agregar el operando LOCAL a LOAD DATA INFILE en lugar de usar mysqlimport para solucionar este problema.

LOAD DATA INFILE LOCAL ...

Esto funcionará sin conceder permisos de archivo.

0

Importar datos a granel en Amazon MySQL RDS es posible de dos maneras. Puede elegir cualquiera de abajo según su conveniencia.

  1. Usando la utilidad de importación.

    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. Envío de un SQL inserción masiva por tubería en en comando 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'); 
    
Cuestiones relacionadas