Importieren von XML in eine AWS RDS-Instanz

Importieren von XML in eine AWS RDS-Instanz

Ich versuche, XML in eine AWS RDS-Instanz (mySql) zu laden.

Die XML sieht folgendermaßen aus: (es ist ein XML-Dump der ISO-3661-Codes)

<?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"/>

Der Befehl, den ich ausführe, ist:

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

Die Fehlermeldung, die ich bekomme, ist:

FEHLER 1148 (42000): Der verwendete Befehl ist mit dieser MySQL-Version nicht zulässig

Die referenzierte Eingabedatei existiert, ich habe vor dem Ausführen des Befehls eine Datenbank ausgewählt und verfüge über die entsprechenden Berechtigungen für die Datenbank. Die Spaltennamen in der Datenbanktabelle stimmen genau mit den XML-Feldnamen überein.

Antwort1

Hier gibt es zwei Dinge. Das eine ist serverseitig, das andere clientseitig.

Überprüfen Sie auf dem Server (AWS RDS), dass Ihre Parametergruppe local_infileauf eingestellt ist 1. Standardmäßig ist sie in RDSland für 5.1 und 5.5 aktiviert.

Zweitens, vorausgesetzt, Sie verwenden die MySQL-Befehlszeile, starten Sie sie mit der Option „local-infile“:

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

Sie können auch „local-infile“ in Ihrer my.cnf festlegen, obwohl es in diesem Fall an die Maschine gebunden ist; YMMV, IANAL, FSCK usw.

Notizdiese 5.1 Dokumentationsagt: „Standardmäßig werden alle MySQL-Clients und -Bibliotheken in Binärdistributionen mit der Option --enable-local-infile kompiliert, um mit MySQL 3.23.48 und früher kompatibel zu sein.“ Das scheint zumindest bei neueren Distributionen nicht der Fall zu sein:

$ 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

verwandte Informationen