» MySQL Problem mit LOCAL INFILE Fehler 1148

Aritkel Informationen:


Artikel Titel: MySQL Problem mit LOCAL INFILE Fehler 1148
Artikel Datum: 01.01.2007
Druckbare Version
Artikel Kategorie: Allgemein
Autor: PAS

Erfolgreich getestet unter MySQL 4.X
Ihr wollt eine beispielsweise eine CSV importieren bekommt aber die Meldung:

#1148 - The used command is not allowed with this MySQL version

Dann liegt es daran das ihr die Einstellung local-infile = 0 hat.
Um dies zu ändern startet ihr euer SSH Programm und loggt euch als Root ein und öffnet anschließend die my.cnf wenn ihr nicht wisst wo diese Datei ist, sucht Ihr sie mit:

find / -name my.cnf

Nun bearbeitet Ihr die Datei mit "vi" und sucht den Bereich "[mysqld]".
Habt Ihr diesen Bereich gefunden dann sucht nach "local-infile =" falls ihr diese Variable nicht findet,
schreibt Ihr sie nach der "port" Variable hin.

.......
# The MySQL server
[mysqld]
port = 3306
local-infile = 1
......

Die Punkte "......" heißen das es dort noch weiter geht.
Nun Speichert Ihr das ganze ab und startet den MySQL Server neu:

/etc/init.d/mysql restart

Wenn euer MySQL Server anders neugestartet wird macht es wie Ihr es immer macht ;).
Jetzt loggt ihr euch in der gewünschten Datenbank ein:

mysql -u webXXX -pXXXXX -h localhost --local-infile=1

Bedeutung:
-u = Username, z.B. web0
-p = Passwort, z.B. test
(ACHTUNG das Passwort steht ohne Leerzeichen nach der Variable -p!!
Also -ptest und NICHT -p test)
-h = Host
--local-infile = Damit die Funktion funktioniert 1 für aktiviert 0 für deaktiviert

Nun sollte bei richtigen Usernamen und Passwort eine ähnliche Meldung wir hier kommen:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is XXX to server version: 4.X.XX

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Nun wählt ihr die Datenbank aus in der sich die Tabellen befinden (Achtung: z.b. web0 hat nur Zugriff auf usr_web0_XX), dazu tippen wir den Befehl in der MySQL Kommandozeile ein:

use usr_web0_1

Als Meldung sollte kommen:

Database changed
mysql>

Jetzt könnt ihr euer "LOAD DATA LOCAL INFILE" befehl eingeben, achtet drauf das der Befehl mit einem ";" endet!
Hier meine Komplette MySQL Sitzung:

server:/home/ # mysql -u web0 -p123456 -h localhost --local-infile=1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 977 to server version: 4.1.18

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use usr_web0_1
Database changed
mysql> LOAD DATA LOCAL INFILE '/home/mysql_data.dat' INTO TABLE test FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
Query OK, 709678 rows affected (20.63 sec)
Records: 709678 Deleted: 0 Skipped: 0 Warnings: 0

mysql> exit
Bye

Somit sollte es jetzt funktionieren :)

Info: Sie sollten Sie aus Sicherheitsgründen in der my.cnf die Variable "local-infile=" wieder auf 0 setzen.

Beachten Sie:
Wir übernehmen keinerlei Haftung für irgendwelche Schäden, Ausfälle oder sonstigen Geschehnissen.
Alle Angaben sind ohne Gewähr, Sie handeln auf eigenes Risiko!

Alle genannten Soft- und Hardwarebezeichnungen sowie Markennamen sind Eigentum ihrer jeweiligen Inhaber und unterliegen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz.
Alle Rechte vorbehalten


Kommentare


>> Kommentar hinzufügen

-- Kommentar von Janai am 12.05.2016 um 23:04:48 --
Pedro • 8 de Fevereiro de 2011 às 13:45Também já actualizei e de facto gostei da novidade da barra no topo do site.Uma só questão: eu escolhi a opção de actualizar na versão portuguesa mas na realidade, o painel wordpress ficou em inglês. Foi só a mim que aconteceu ou há mais pessoas nesta situação? Não é nada de prcelmotibo mas algo correu mal.

-- Kommentar von Cheyanna am 29.09.2012 um 10:55:33 --
At last! Soemone with the insight to solve the problem!