91 votes

ERROR 1148 : La commande utilisée n'est pas autorisée avec cette version de MySQL.

J'essaie de charger les données dans la base de données mysql en utilisant

LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

Le sujet de cette question est la réponse que je reçois. Je comprends que le déchargement des données locales est désactivé par défaut et que je dois l'activer à l'aide de la commande local-infile=1 mais je ne sais pas où placer cette commande.

12voto

Domi nic Points 133

Tout cela n'a pas résolu le problème pour moi sur ma toute nouvelle Ubuntu 15.04.

J'ai retiré le LOCAL et j'ai eu cette commande :

LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

mais ensuite j'ai eu :

MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)

Cela m'a conduit à cette réponse de Nelson à une autre question sur stackoverflow ce qui a résolu le problème pour moi !

8voto

Nilesh Mishra Points 61

J'ai rencontré le même problème lors de l'importation du fichier CSV dans AWS MySQL 8.0 RDS.

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINÉS PAR ',' ENCLOSES PAR '"' LIGNES TERMINÉES PAR ' \n ' IGNORE 1 LIGNES ;

ERREUR 1148 (42000) : La commande utilisée n'est pas autorisée avec cette version de MySQL

1) Vérifier si local_infile paramètre

mysql> SHOW VARIABLES LIKE 'local_infile';

2) Déconnectez-vous du client et reconnectez-vous en utilisant le paramètre ci-dessous.

mysql -u root -p -h rdsendpoint --local-infile=1

3) Exécutez la même commande

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;

Query OK, 300 rows affected (0.01 sec)

Records: 300  Deleted: 0  Skipped: 0  Warnings: 0

4voto

VladimirS Points 291

Juste un petit ajout.

J'ai trouvé une autre réincarnation dans mysql.connector ver 8.0.16 Il faut maintenant allow_local_infile=True ou vous verrez l'erreur ci-dessus. Cela fonctionnait dans les versions précédentes.

conn = mysql.connector.connect(host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)

2voto

Atul Points 64

Si vous utilisez Java8 ou une version supérieure, JDBC et MySql8 et que vous rencontrez ce problème, essayez ceci :

Ajouter un paramètre à la chaîne de connexion :

jdbc:mysql://localhost:3306/tempDB?allowLoadLocalInfile=true

En outre, il faut définir

local_infile = 1

dans le fichier my.cnf.

La dernière version de mysql-java-connector ne permet peut-être pas de se connecter directement au fichier local. Donc, avec ce paramètre, vous pouvez l'activer. Cela fonctionne pour moi.

1voto

gies0r Points 107

Les premières réponses sont correctes. Veuillez d'abord les vérifier directement dans le CLI de MySQL. Si cela résout le problème là-bas, vous voudrez peut-être le faire fonctionner en Python3 en le passant simplement à la fonction MySQLdb.connect en tant que paramètre

self.connection = MySQLdb.connect(
                    host=host, user=settings_DB.db_config['USER'],
                    port=port, passwd=settings_DB.db_config['PASSWORD'], 
                    db=settings_DB.db_config['NAME'],
                    local_infile=True)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X