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
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 appelermysql_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'optionlocal-infile=1
à ce groupe. Cependant, pour éviter que cela ne pose problème aux programmes qui ne comprennent paslocal-infile
, spécifiez-le en utilisant le préfixeloose-
:[client] loose-local-infile = 1Si
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
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
.
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.
À 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: