web-dev-qa-db-fra.com

Comment puis-je corriger l'erreur de chargement MySQL

Je ne suis pas certain qu'une question similaire à celle-ci ait été fermée par J'essaie d'exécuter le programme MySQL suivant.

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

sur la ligne de commande bash et obtenez cette erreur

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

Comment puis-je contourner ce problème?

En fait, j'exécute cette commande à partir d'un programme Python, mais je l'ai extraite pour essayer de la jouer avec la ligne de commande bash.

J'ai vu comment je peux modifier my.cnf (local-infile), mais je ne veux pas d'un changement global si je peux l'éviter.

Voici la version de MySQL.

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

24
octopusgrabbus

Comme indiqué dans Problèmes de sécurité avec LOAD DATA LOCAL :

Pour résoudre ces problèmes, nous avons changé la manière dont LOAD DATA LOCAL est géré à partir de MySQL 3.23.49 et MySQL 4.0.2 (4.0.13 sous Windows):

  • Par défaut, tous les clients et bibliothèques MySQL des distributions binaires sont compilés avec l'option --enable-local-infile, afin d'être compatibles avec MySQL version 3.23.48 et les versions antérieures.

  • Si vous construisez MySQL à partir des sources sans invoquer configure avec l'option --enable-local-infile, LOAD DATA LOCAL ne peut être utilisé par aucun client, à moins qu'il soit écrit explicitement pour appeler mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0) . Voir Section 20.6.6.49, «mysql_options()» .

  • Vous pouvez désactiver toutes les instructions LOAD DATA LOCAL du côté serveur en démarrant mysqld avec l'option --local-infile=0 .

  • Pour le client en ligne de commande mysql , activez LOAD DATA LOCAL en spécifiant l'option --local-infile[=1] ou désactivez-le avec l'option --local-infile=0 . Pour mysqlimport , le chargement du fichier de données local est désactivé par défaut; activez-le avec l'option --local ou -L. Dans tous les cas, l'utilisation réussie d'une opération de chargement local nécessite l'autorisation du serveur.

  • Si vous utilisez LOAD DATA LOCAL des scripts Perl ou d'autres programmes lisant le groupe [client] à partir de fichiers d'options, vous pouvez ajouter l'option local-infile=1 à ce groupe. Cependant, pour éviter que cela ne pose problème aux programmes qui ne comprennent pas local-infile, spécifiez-le en utilisant le préfixe loose-:

     [client] 
     loose-local-infile = 1 
    
  • Si LOAD DATA LOCAL est désactivé, sur le serveur ou sur le client, un client qui tente d'émettre une telle instruction reçoit le message d'erreur suivant:

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

32
eggyal

La solution consiste à modifier la ligne de commande mysql -e pour transmettre l'argument --local-infile=1 comme ceci:

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

Ensuite, exécutez à nouveau la commande LOAD DATA LOCAL INFILE

47
octopusgrabbus

local-infile doit être activé à la fois sur le serveur et sur le client. Vous pouvez y parvenir en ajoutant local-infile = 1 à la section appropriée du fichier my.cnf (Unix) ou my.ini (Windows) de chaque extrémité. Par exemple, sur le client:

[client]
local-infile = 1

Vous pouvez également l'activer au moment de l'exécution sur le serveur en définissant la variable système local_infile:

SET GLOBAL local_infile=1;

Cependant, vous devez toujours l'activer sur le client. Vous pouvez le faire à l'exécution en ajoutant un paramètre de ligne de commande à la commande mysql:

mysql --local-infile=1 ...

Si vous utilisez Amazon Web Services RDS, vous pouvez configurer le paramètre du serveur en modifiant ou en créant un groupe de paramètres. Recherchez le paramètre local_infile. Vous devrez peut-être redémarrer votre serveur après avoir appliqué les modifications.

8
Zenexer

À mon avis, LOAD DATA LOCAL n'est pas activé sur votre serveur MySQL. Voir cette section de la documentation MySQL:

Si LOAD DATA LOCAL est désactivé, sur le serveur ou sur le client, un client qui tente d'émettre une telle instruction reçoit le message d'erreur suivant:

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

Voici un lien vers la page dont je tire ce message:

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

0
Mike Brant