Estoy intentando cargar algo de xml en una instancia de AWS RDS (mySql).
El xml se ve así: (es un volcado xml de los códigos ISO-3661)
<?xml version="1.0" encoding="UTF-8"?>
<countries>
<countries name="Afghanistan" alpha-2="AF" alpha-3="AFG" country-code="004" iso_3166-2="ISO 3166-2:AF" region-code="142" sub-region-code="034"/>
<countries name="Åland Islands" alpha-2="AX" alpha-3="ALA" country-code="248" iso_3166-2="ISO 3166-2:AX" region-code="150" sub-region-code="154"/>
<countries name="Albania" alpha-2="AL" alpha-3="ALB" country-code="008" iso_3166-2="ISO 3166-2:AL" region-code="150" sub-region-code="039"/>
<countries name="Algeria" alpha-2="DZ" alpha-3="DZA" country-code="012" iso_3166-2="ISO 3166-2:DZ" region-code="002" sub-region-code="015"/>
El comando que estoy ejecutando es:
LOAD XML LOCAL INFILE '/var/www/ISO-3166_SMS_Country_Codes.xml' INTO TABLE `ISO-3661-codes`(`name`,`alpha-2`,`alpha-3`,`country-code`,`region-code`,`sub-region-code`);
El mensaje de error que recibo es:
ERROR 1148 (42000): El comando utilizado no está permitido con esta versión de MySQL
El archivo interno al que se hace referencia existe, seleccioné una base de datos antes de ejecutar el comando y tengo los privilegios adecuados sobre la base de datos. Los nombres de las columnas en la tabla de la base de datos coinciden exactamente con los nombres de los campos xml.
Respuesta1
Hay dos cosas aquí. Uno es del lado del servidor y el otro del lado del cliente.
En el servidor (AWS RDS), verifique su grupo de parámetros para asegurarse de que local_infile
esté configurado en 1
. De forma predeterminada, está habilitado en RDSland para 5.1 y 5.5.
En segundo lugar, suponiendo que esté utilizando la línea de comandos mysql, iníciela con la opción local-infile:
mysql --local-infile -hhostname -uusername -p databasename
También puede configurar el archivo de entrada local en su my.cnf, aunque en ese caso está vinculado a la máquina; YMMV, IANAL, FSCK, etc.
Notaesta documentación 5.1dice "De forma predeterminada, todos los clientes y bibliotecas MySQL en distribuciones binarias se compilan con la opción --enable-local-infile, para que sean compatibles con MySQL 3.23.48 y anteriores". Ese no parece ser el caso con las distribuciones recientes, al menos:
$ mysql --help | grep ^local-infile # Ubuntu 12.04
local-infile FALSE
$ mysql --help | grep ^local-infile # Ubuntu 12.04, fairly stock AWS AMI
local-infile FALSE
$ mysql --help | grep ^local-infile # OSX 10.8
local-infile FALSE