Ich bin mir nicht sicher, ob eine ähnliche Frage geschlossen wurde, als ich versuche, das folgende MySQL-Programm auszuführen.
mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"
an der Bash-Befehlszeile und erhalten diesen Fehler
ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version
Wie kann ich dieses Problem umgehen?
Ich führe diesen Befehl tatsächlich in einem Python-Programm aus, habe ihn aber herausgezogen, um zu versuchen, in der Bash-Befehlszeile damit herumzuspielen.
Ich habe gesehen, wie ich my.cnf (local-infile) ändern kann, aber ich möchte nicht, dass global eine Änderung erfolgt, wenn ich dies vermeiden kann.
Hier ist die MySQL-Version.
mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2
Wie unter Sicherheitsprobleme mit LOAD DATA LOCAL
dokumentiert:
Um mit diesen Problemen umzugehen, haben wir geändert, wie
LOAD DATA LOCAL
ab MySQL 3.23.49 und MySQL 4.0.2 (4.0.13 unter Windows) gehandhabt wird:
Standardmäßig werden alle MySQL-Clients und -Bibliotheken in Binärdistributionen mit der Option
--enable-local-infile
so kompiliert, dass sie mit MySQL 3.23.48 und davor kompatibel sind.Wenn Sie MySQL aus dem Quellcode erstellen, aber configure nicht mit der
--enable-local-infile
-Option aufrufen, kannLOAD DATA LOCAL
von keinem Client verwendet werden, es sei denn, es wird explizit geschrieben, ummysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)
aufzurufen. Siehe Abschnitt 20.6.6.49, „mysql_options()
“ .Sie können alle
LOAD DATA LOCAL
-Anweisungen von der Serverseite aus deaktivieren, indem Sie mysqld mit der Option--local-infile=0
starten.Aktivieren Sie für den Befehlszeilenclient mysql
LOAD DATA LOCAL
, indem Sie die Option--local-infile[=1]
angeben, oder deaktivieren Sie sie mit der Option--local-infile=0
. Für mysqlimport ist das Laden lokaler Datendateien standardmäßig deaktiviert. Aktivieren Sie es mit der Option--local
oder-L
. In jedem Fall erfordert die erfolgreiche Verwendung einer lokalen Ladeoperation, dass der Server dies zulässt.Wenn Sie
LOAD DATA LOCAL
in Perl-Skripts oder anderen Programmen verwenden, die die[client]
-Gruppe aus Optionsdateien lesen, können Sie der Gruppe dielocal-infile=1
-Option hinzufügen. Damit dies jedoch nicht zu Problemen für Programme führt, dielocal-infile
nicht verstehen, geben Sie dies mit dem Präfixloose-
an:[Client] loose-local-infile = 1Wenn
LOAD DATA LOCAL
entweder auf dem Server oder auf dem Client deaktiviert ist, erhält ein Client, der versucht, eine solche Anweisung auszugeben, die folgende Fehlermeldung:
ERROR 1148: The used command is not allowed with this MySQL version
Um dieses Problem zu umgehen, ändern Sie die Befehlszeile mysql -e
so, dass das --local-infile=1
-Argument wie folgt übergeben wird:
mysql --local-infile=1 -u username -p `
Führen Sie dann den Befehl LOAD DATA LOCAL INFILE
erneut aus.
local-infile
muss sowohl auf dem Server als auch auf dem Client aktiviert sein. Sie können dies erreichen, indem Sie local-infile = 1
in den entsprechenden Abschnitt der my.cnf
(Unix) - oder my.ini
(Windows) -Datei jedes Endes einfügen. Zum Beispiel auf dem Client:
[client]
local-infile = 1
Sie können dies auch zur Laufzeit auf dem Server aktivieren, indem Sie die Systemvariable local_infile
einstellen:
SET GLOBAL local_infile=1;
Sie müssen es jedoch weiterhin auf dem Client aktivieren. Sie können dies zur Laufzeit tun, indem Sie dem Befehl mysql
einen Befehlszeilenparameter hinzufügen:
mysql --local-infile=1 ...
Wenn Sie Amazon Web Services RDS verwenden, können Sie die Servereinstellung konfigurieren, indem Sie eine Parametergruppe bearbeiten oder erstellen. Suchen Sie nach dem local_infile
-Parameter. Möglicherweise müssen Sie Ihren Server neu starten, nachdem Sie die Änderungen übernommen haben.
Ich vermute, dass auf Ihrem MySQL-Server LOAD DATA LOCAL
nicht aktiviert ist. Siehe diesen Abschnitt der MySQL-Dokumentation:
Wenn LOAD DATA LOCAL entweder auf dem Server oder auf dem Client deaktiviert ist, erhält ein Client, der versucht, eine solche Anweisung auszugeben, folgende Fehlermeldung:
ERROR 1148: Der verwendete Befehl ist in dieser MySQL-Version nicht zulässig
Hier ist ein Link zu der Seite, von der ich folgendes bekommen habe: