wake-up-neo.net

Wie kann ich MySQL Load Error korrigieren?

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

24
octopusgrabbus

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, kann LOAD DATA LOCAL von keinem Client verwendet werden, es sei denn, es wird explizit geschrieben, um mysql_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 mysqlLOAD 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 die local-infile=1-Option hinzufügen. Damit dies jedoch nicht zu Problemen für Programme führt, die local-infile nicht verstehen, geben Sie dies mit dem Präfix loose- an:

     [Client] 
     loose-local-infile = 1 
    
  • Wenn 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

32
eggyal

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. 

47
octopusgrabbus

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.

8
Zenexer

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:

http://dev.mysql.com/doc/refman/5.5/de/load-data-local.html

0
Mike Brant