Importando XML para uma instância AWS RDS

Importando XML para uma instância AWS RDS

Estou tentando carregar algum xml em uma instância do AWS RDS (mySql).

O xml se parece com: (é um dump xml dos 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"/>

O comando que estou executando é:

 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`);

A mensagem de erro que recebo é:

ERRO 1148 (42000): O comando usado não é permitido com esta versão do MySQL

O arquivo interno referenciado existe, selecionei um banco de dados antes de executar o comando e tenho privilégios apropriados no banco de dados. Os nomes das colunas na tabela do banco de dados correspondem exatamente aos nomes dos campos XML.

Responder1

Há duas coisas aqui. Um é do lado do servidor, o outro é do lado do cliente.

No servidor (AWS RDS), verifique seu grupo de parâmetros para garantir que local_infileesteja definido como 1. Por padrão, ele está habilitado no RDSland para 5.1 e 5.5.

Segundo, supondo que você esteja usando a linha de comando mysql, inicie-o com a opção local-infile:

mysql --local-infile -hhostname -uusername -p databasename

Você também pode definir local-infile em seu my.cnf, embora nesse caso ele esteja vinculado à máquina; YMMV, IANAL, FSCK, etc.

Observaçãoesta documentação 5.1diz "Por padrão, todos os clientes e bibliotecas MySQL em distribuições binárias são compilados com a opção --enable-local-infile, para serem compatíveis com MySQL 3.23.48 e anteriores." Esse não parece ser o caso das distros recentes, pelo 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

informação relacionada