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_infile
auf 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