Importation d'un fichier csv dans une table de mysql

Signaler
Messages postés
13
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
26 avril 2021
-
Messages postés
13
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
26 avril 2021
-
Bonjour,
Bonjour à tous,
je débute avec Mysql 8.0.23 sous Ubuntu 20.10 for Linux x86_64.
J'ai installé mysql server et mysql client. et je les ai démarrés l'un avec
sudo service mysql startet le client avec mysql -u root -p .
Tout a bien fonctionné

J'ai créé une base que j'ai nommé Essai et une table T_Essai ayant 6 champs et un index . J'ai indiqué les types de variable des chanps, les longuers etc...et j'ai vérifié par un DESCRIBE T_Essai; que tout est bien entré.

Ma table ne contient que les noms des champs
Dans un de mes répertoires, je possède un fichier csv contenant 6 champs que je souhaite importer dans ma table T_Essai. Ce fichier csv provient d'un fichier excel et les champs sont séparés par des points-virgules.
Lorsque je fais ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part

LOAD DATA LOCAL INFILE 'chemin du fichier csv'
INTO TABLE T_Essai
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

j'obtiens l'erreur suivante:

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
renseignements pris sur internet, il semblerait que la variable local-infile doit être sur ON. Chez moi, elle est sur OFF et j'ai essayé de la retrouver dans les fichiers my.cnf ou mysql.cnf ou encore mysql.conf.d, en vain.

Je précise que je n'ai pas phpmyadmin ni aucun autre logiciel graphique. je souhaite faire cette importation exclusivement en ligne de commende

Quelqu'un a-t-il une idée sur la résolution de ce problème ?
La commande LOAD DATA LOCAL INFILE ? Est-ce la bonne commande pour ce type de problème ?

Je suis bloqué sur cette question depuis 2 jours ! Si quelqu'un veut bien prendre le temps de me donner des tuyaux, je lui en saurais gré.
Merci


Configuration: Linux / Firefox 87.0

4 réponses

Messages postés
32178
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 avril 2021
3 426
Bonjour,

l semblerait que la variable local-infile doit être sur ON. Chez moi, elle est sur OFF

Oui il faut la mettre sur ON
et j'ai essayé de la retrouver dans les fichiers my.cnf ou mysql.cnf ou encore mysql.conf.d, en vain.

Si elle n'est pas présente, il suffit de l'ajouter.
[mysqld]
local_infile=ON

Tu peux aussi le faire lors du démarrage de mysql
mysql --local-infile -uroot -pyourpwd yourdbname

Messages postés
13
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
26 avril 2021

Merci Jordane,
Mais je lis, sur ta ligne de commande pour démarrer mysql, --local-infile mais tu ne donnes pas la valeur TRUE à cette variable. J'ai entré ta ligne de commande et elle ne démarre pas mon client
Messages postés
13
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
26 avril 2021

J'ai fait :
mysql -p -u root --local-infile Essai

(essai est le nom de ma base déjà créée)
Cela a fonctionné ! mais quand je fais:
show variables;
je vois que local-infile est tjs sur OFF
Messages postés
32178
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 avril 2021
3 426
Je ne t'ai donné que la ligne de commande coté client.
Par défaut, sa valeur est à true
Dans la doc, il est indiqué

For the mysql client, local data loading capability is determined by the default compiled into the MySQL client library. To disable or enable it explicitly, use the --local-infile=0 or --local-infile[=1] option.


Côté serveur, il faut démarrer avec l'option
--local-infile[={OFF|ON}] ( donc, dans ton cas, à ON )


Enfin, tout ça c'est dans la documentation.
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile
Messages postés
13
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
26 avril 2021

Voilà ce que je fais pour lancer le serveur:

sudo service mysql --local-infile=ON start

et voilà ce qu'il me répond

Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status
et il ne lance pas le serveur