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.

1voto

K F Points 366

J'ai obtenu cette erreur lors du chargement des données en utilisant docker[1]. La solution a fonctionné après avoir suivi les étapes suivantes. Au départ, j'ai créé la base de données et la table datavault y fdata . Lorsque j'ai essayé d'importer les données [2], j'ai obtenu l'erreur [3]. Alors je l'ai fait :

  • SET GLOBAL local_infile = 1;
  • Confirmez en utilisant SHOW VARIABLES LIKE 'local_infile';
  • Puis j'ai redémarré ma session mysql : mysql -P 3306 -u required --local-infile=1 -p voir [4] pour la création d'un utilisateur.
  • I recréé ma table car cela a résolu mon problème :
    • use datavault;
    • drop table fdata;
    • CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
  • Enfin, j'ai importé les données en utilisant [2].

Pour être complet, j'ajouterais que j'exécutais la version mysql à l'intérieur du conteneur via docker exec -it testdb sh . La version de mysql était mysql Ver 8.0.17 pour Linux sur x86_64 (MySQL Community Server - GPL) . C'était aussi testé avec mysql.exe Ver 14.14 Distrib 5.7.14, pour Win64 (x86_64) qui était une autre version de mysql de WAMP64. Les commandes associées utilisées sont listées dans [5].


[1] docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest

[2] load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;

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

[4] Le client requis a été créé en utilisant :

  • CREATE USER 'required'@'%' IDENTIFIED BY 'password';
  • GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
  • FLUSH PRIVILEGES;
  • Vous pourriez avoir besoin de cette ligne ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; si vous rencontrez cette erreur : Authentication plugin ‘caching_sha2_password’ cannot be loaded

[5] Commandes utilisant mysql depuis WAMP64 :

  • mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1 où le port est le port mappé dans l'hôte comme décrit par docker ps -a et l'ip de l'hôte a été obtenu en utilisant docker-machine ip (Cela dépend du système d'exploitation et éventuellement Docker version).
  • Créer une base de données datavault2 et table fdata comme décrit ci-dessus
  • load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
  • Pour mon information, cette autre alternative pour charger le fichier a fonctionné après que j'ai créé précédemment datavault3 y fdata : mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS" et il a chargé avec succès les données facilement vérifiées après avoir exécuté select * from fdata limit 10; .

0voto

mathsyouth Points 960

Reportez-vous au manuel de référence de MySQL 8.0 6.1.6 Problèmes de sécurité avec LOAD DATA LOCAL

Du côté du serveur, exécutez

mysql.server start --local-infile

Du côté client, exécutez

mysql --local-infile database_name -u username -p

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