2010-08-12 22 views
53

J'ai regardé partout et n'a trouvé aucune solution, toute aide sur ce serait génial.mysql chargement des données infile ne peut pas obtenir stat du fichier Errcode: 2

Requête:

LOAD DATA INFILE '/Users/name/Desktop/loadIntoDb/loadIntoDB.csv' 
INTO TABLE `tba`.`tbl_name` 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(
field1, field2, field3 
) 

Erreur:

Can't get stat of '/Users/name/Desktop/loadIntoDb/loadIntoDB.csv' (Errcode:2) 

REMARQUE:

Je cours MySQL Query Browser sur Mac OS X 10.6.4 se connecter à MySQL 5.x

Ce que j'ai essayé:

  • Drag-n-drop
  • chmod 777
  • Mettre dans un dossier avec 777 autorisations ainsi que le fichier ayant 777 autorisations
+0

Vérifiez les forums mysql. Voici juste un lien là-dessus: http://forums.mysql.com/read.php?10,228976,228976#msg-228976 – spinon

+0

@spinon essayé cela, ne fonctionne pas. Cela me donne le même chemin de fichier que j'ai. J'ai enlevé ce que j'avais et drop-n-glisser le fichier. Me donne le même chemin. Lors de l'exécution me donne la même erreur –

+1

Semble aussi que le fichier peut ne pas exister: http://www.electrictoolbox.com/article/mysql/mysqlimport-errors/ Recherche de code d'erreur: 2 sur la page – spinon

Répondre

101

essayer d'utiliser LOAD DATA LOCAL INFILE au lieu de LOAD DATA INFILE

sinon vérifiez si apparmor est actif pour votre répertoire

+0

essayé, mais maintenant je reçois une erreur SQL: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'LOCAL DATA INFILE' /Users/name/Desktop/loadIntoDb/loadIntoDB.csv ' INT' à la ligne 1 –

+6

c'est LOAD DATA LOCAL INFILE depuis que vous menez moi sur le bon chemin. Réponse acceptée –

+0

ah, oui, désolé pour la faute de frappe – Pierre

9

J'ai eu un problème similaire. La résolution était un hack légèrement moche, mais beaucoup plus facile à retenir que les solutions de contournement d'Apparmor à condition que vous pouvez «sudo». Tout d'abord, je devais mettre le fichier d'entrée dans le sous-répertoire MySQL pour la base de données que j'utilisais:

sudo cp myfile.txt /var/lib/mysql/mydatabasename 

Cela fait une copie et les feuilles « root » en tant que propriétaire du fichier. Après avoir été dans MySQL et faire un USE mydatabasename, j'ai pu remplir le tableau approprié à l'aide

LOAD DATA INFILE 'mytabdelimitedtextfile.txt' INTO TABLE mytablename; 
+1

Pour qui? pourrait trouver cela utile, c'est la solution qui a fonctionné pour moi au lieu de la réponse acceptée.Je suis sur Ubuntu 12.04 LTS et MySQL 5.5.35-0ubuntu0.12.04.1 –

+1

De même, j'ai pu contourner cela sur Ubuntu 12.04, mysql 5.5.31 en changeant l'utilisateur de mon fichier: groupe en mysql: mysql – user18477575

1

Pour moi, la copie le contenu de/tmp et en utilisant cela comme le dossier source a fait l'affaire. J'utilise MariaDB, et ma version ne permet pas d'utiliser le modificateur "LOCAL". Il est intéressant de noter que l'accès en lecture-écriture au dossier CSV ne fonctionnait pas non plus.

0

J'ai rencontré le même problème lors du remplissage d'une table dans mysql sur une instance AWS.

Dans mon cas, j'avais le fichier csv dans l'instance elle-même. Le fait de mettre le chemin absolu a résolu mon problème avec

est ici la ligne de la documentation MySQL

If LOCAL is specified, the file is read by the client program on the client host and sent to the server. The file can be given as a full path name to specify its exact location. If given as a relative path name, the name is interpreted relative to the directory in which the client program was started.

http://dev.mysql.com/doc/refman/5.7/en/load-data.html