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;
.