2013-04-29 11 views
22

Non sono sicuro che una domanda simile sia stata chiusa cercando di eseguire il seguente programma MySQL.Come posso correggere l'errore di caricamento di MySQL

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' ;" 

nella riga di comando bash e ottenere questo errore

ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version

Come posso risolvere questo problema?

In realtà sto eseguendo questo comando da un programma Python, ma ho estratto il comando per provare a giocherellare con esso alla riga di comando di bash.

Ho visto come posso modificare my.cnf (locale-infile), ma non voglio che un cambiamento globale se posso evitarlo.

Ecco la versione di MySQL.

mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2

risposta

29

Come documentato in Security Issues with LOAD DATA LOCAL:

per affrontare questi problemi, abbiamo cambiato il modo LOAD DATA LOCAL viene gestito a partire da MySQL 3.23.49 e MySQL 4.0.2 (4.0.13 su Windows) :

  • per impostazione predefinita, tutti i client MySQL e librerie a distribuzioni binarie sono compilati con l'opzione --enable-local-infile, di essere compatibile con MySQL 3.23.48 e versioni precedenti.

  • Se si costruisce MySQL dal sorgente, ma non richiama configure con l'opzione --enable-local-infile, LOAD DATA LOCAL non può essere utilizzato da qualsiasi client meno che non sia scritto in modo esplicito per invocare mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0). Vedi Section 20.6.6.49, “mysql_options().

  • È possibile disattivare tutte le istruzioni LOAD DATA LOCAL dal lato server avviando mysqld con l'opzione --local-infile=0.

  • Per il client mysql riga di comando, attivare LOAD DATA LOCAL specificando l'opzione --local-infile[=1], o disattivare con l'opzione --local-infile=0. Per mysqlimport, il caricamento del file di dati locale è disattivato per impostazione predefinita; abilitarlo con l'opzione --local o -L. In ogni caso, l'uso corretto di un'operazione di caricamento locale richiede che il server lo consenta.

  • Se si utilizza LOAD DATA LOCAL negli script Perl o altri programmi che leggono il gruppo [client] da file opzione, è possibile aggiungere l'opzione local-infile=1 a quel gruppo.Tuttavia, per evitare che ciò causando problemi per i programmi che non capiscono local-infile, specificarlo utilizzando il loose- prefisso:

     
    [client] 
    loose-local-infile=1 
    
  • Se LOAD DATA LOCAL è disabilitato, sia nel server o il client, un client che tenta di emettere tale dichiarazione riceve il seguente messaggio di errore:

    ERROR 1148: The used command is not allowed with this MySQL version

+1

Questo non mi aiuta affatto. Voglio una soluzione. E ho messo local-infile in my.cnf, e questo non ha cambiato l'errore. Comincio MySQL con le istruzioni fornite quando installato. Non faccio niente di speciale. La tua risposta continua a non fornire una soluzione alternativa, perché non ho disabilitato specificamente nulla. – octopusgrabbus

+0

@octopusgrabbus se non ti sta affatto aiutando, perché hai accettato la risposta allora ?? Perché non hai accettato la tua risposta invece ??? – TMS

0

La mia ipotesi è che il server MySQL non sia abilitato con LOAD DATA LOCAL. Vedere questa sezione di MySQL documentazione:

Se LOAD DATA LOCAL è disabilitato, sia nel server o il client, un client che tenta di rilasciare una dichiarazione quali riceve il seguente messaggio di errore:

ERRORE 1148: il comando utilizzato non è consentito con questa versione di MySQL

Ecco link alla pagina ho ricevuto questo da:

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

45

La soluzione per questo è modificare la riga di comando mysql -e passare nell'argomento --local-infile=1 simili:

mysql --local-infile=1 -u username -p ` 

eseguire di nuovo il comando LOAD DATA LOCAL INFILE.

7

local-infile deve essere abilitato sia sul server che sul client. È possibile eseguire questa operazione aggiungendo local-infile = 1 alla sezione appropriata nel file my.cnf (Unix) o my.ini (Windows) di ogni estremità. Per esempio, sul client:

[client] 
local-infile = 1 

è possibile attivare anche questo in fase di esecuzione sul server impostando la variabile di sistema local_infile:

SET GLOBAL local_infile=1; 

Tuttavia, è ancora necessario attivare sul client. È possibile farlo in fase di esecuzione con l'aggiunta di un parametro di riga di comando per il comando mysql:

mysql --local-infile=1 ... 

Se stai usando Amazon Web Services RDS, è possibile configurare l'impostazione del server per la modifica o la creazione di un gruppo di parametri. Cerca il parametro local_infile. Potrebbe essere necessario riavviare il server dopo aver applicato le modifiche.

+1

'SET local_infile = 1;' fallirà nelle versioni MySQL più recenti. –

+1

SET GLOBAL local_infile = 1; ha funzionato per me – Minkymorgan

+0

@Minkymorgan Grazie, aggiornato. – Zenexer

Problemi correlati