160 votes

MySQL : Activer LOAD DATA LOCAL INFILE

J'utilise Mysql 5.5 sur Ubuntu 12 LTS. Comment dois-je activer LOAD DATA LOCAL INFILE dans my.cnf ?

J'ai essayé d'ajouter local-infile dans ma configuration à différents endroits mais j'obtiens toujours le message "La commande utilisée n'est pas autorisée avec cette version de MySQL".

220voto

dAm2K Points 3283

Depuis la page de manuel de MySQL 5.5 :

LOCAL ne fonctionne que si votre serveur et votre client ont tous deux été configurés pour l'autoriser. Par exemple, si mysqld a été lancé avec --local-infile=0, LOCAL ne fonctionne pas. Voir Section 6.1.6, " Problèmes de sécurité avec LOAD DATA LOCAL ".

Vous devez définir l'option :

local-infile=1

dans votre [mysql] du fichier my.cnf ou appeler le client mysql avec l'entrée --local-infile option :

mysql --local-infile -uroot -pyourpwd yourdbname

Il faut s'assurer que le même paramètre est défini dans votre [mysqld] pour activer la fonction "fichier d'entrée local" côté serveur.

C'est une restriction de sécurité.

4 votes

Merci. Au fait, le my.cnf Le chemin est /etc/mysql/my.cnf dans ma machine (AWS EC2).

0 votes

Il est intéressant de noter que le fichier my.cnf se trouvait dans le répertoire /etc pour moi.

0 votes

Avez-vous des idées sur la marche à suivre si l'échec persiste ? J'ai ajouté local-infile=1 au fichier my.cnf sous [client], [mysqld] et [mysql] et utilisé des combinaisons de ces éléments. Tout cela avec les mêmes résultats. J'ai essayé de redémarrer Workbench, mais sans succès. J'ai également arrêté et relancé l'atelier MySQL entre chaque modification.

69voto

hlosukwakha Points 247

Le fichier my.cnf que vous devez modifier est le suivant /etc/mysql/my.cnf dossier. Juste :

sudo nano /etc/mysql/my.cnf

Puis ajoutez :

[mysqld]
local-infile 

[mysql]
local-infile 

Les en-têtes [mysqld] et [mysql] sont déjà donnés, il suffit de les localiser dans le fichier et d'ajouter fichier local en dessous de chacun d'eux.

Cela fonctionne pour moi avec MySQL 5.5 sur Ubuntu 12.04 LTS.

1 votes

Cela a définitivement réglé le problème pour moi avec Ubuntu 12.04.

4 votes

Je peux confirmer Ubuntu 14.04.2 LTS not working également.

0 votes

Fonctionne aussi sur Mac. Pour les utilisateurs de Mac, /mysql/my.cnf n'existe pas par défaut. Il suffit de créer le répertoire et le fichier, et de coller ces lignes dans le fichier.

29voto

BeniSK Points 111

Remplacer le pilote php5-mysql par le pilote natif

Sur debian

apt-get install php5-mysqlnd

0 votes

Cela a marché ! En utilisant le stock aws 12.04 ubuntu, j'avais besoin de 'local' car je me connecte à RDS. Merci beaucoup !

0 votes

Merci beaucoup, cette solution a fonctionné pour moi. J'ai posé la question stackoverflow.com/questions/36526102/

0 votes

Pas de succès ubuntu 12.04

14voto

tony gil Points 2966

Si votre version de mysql sur ubuntu ne fonctionne en aucun cas et que vous obtenez toujours l'erreur 1148, vous pouvez exécuter la commande suivante load data infile via la ligne de commande

ouvrir une fenêtre de terminal

exécuter mysql -u YOURUSERNAME -p --local-infile YOURDBNAME

il vous sera demandé d'insérer le mot de passe mysqluser

vous allez exécuter MySQLMonitor et votre invite de commande sera mysql>

exécutez votre load data infile (n'oubliez pas de terminer par un point-virgule). ; )

comme ça :

load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

3voto

sieppl Points 421

Vous devez faire attention à la façon dont vous établissez votre connexion mysqli. Tout le mérite de cette solution revient à Jorge Albarenque, source

Pour le réparer, j'ai dû le faire :

  • Ajoutez local-infile=1 aux sections [mysqld] et [mysql] de my.cnf (comme expliqué dans les commentaires ci-dessus).
  • Utilisez la fonction mysqli_real_connect ( Documentation PHP ).

Le problème est qu'avec cette fonction, vous pouvez explicitement activer le support de LOAD DATA LOCAL INFILE. Par exemple (style procédural) :

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $host, $username, $password, $database);

ou orienté objet

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);

1 votes

@Mask Impossible de confirmer. Ma solution fonctionne sous 5.5.46 (Ubuntu).

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