web-dev-qa-db-fra.com

Impossible de trouver le fichier créé par outfile dans MySQL

J'utilise la requête suivante pour créer un fichier CSV

SELECT email INTO OUTFILE "mydata.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM users;

Mais je ne peux pas trouver le fichier mydata.csv n'importe où lorsque je recherche dans filezilla.

Une idée d'où ce fichier est stocké?

La requête s'exécute avec succès sans aucune erreur! De l'aide?

43
user1460822

MySQL écrit peut-être le fichier dans son propre répertoire de données, comme /var/lib/mysql/<databasename> par exemple. Pour spécifier le chemin, utilisez un chemin complet.

Cependant, il doit s'agir d'un répertoire accessible en écriture par le compte utilisateur sous lequel le démon du serveur MySQL s'exécute. Pour cette raison, j'utiliserai souvent /tmp:

Spécifiez le chemin dans lequel vous souhaitez écrire:

INTO OUTFILE '/tmp/mydata.csv'

Et notez que MySQL écrit le fichier sur le serveur MySQL , pas sur votre machine cliente. Par conséquent, les connexions à distance créeront des fichiers de sortie sur le serveur distant. Voir aussi SELECT INTO OUTFILE local? pour plus de détails et des solutions.

Systemd et Linux

Une note sur l'écriture dans /tmp sur un système Linux exécutant systemd:

Quelques années après avoir initialement publié ce message, je me suis retrouvé incapable de localiser un fichier écrit dans /tmp via

...INTO OUTFILE '/tmp/outfile.csv'

sur un serveur MariaDB 5.5 exécutant Fedora Linux avec systemd. Au lieu d'écrire le fichier directement dans /tmp/outfile.csv comme spécifié, ce répertoire et ce fichier ont été créés sous un répertoire systemd dans /tmp:

/tmp/systemd-mariadb.service-XXXXXXX/tmp/outfile.csv

Alors que le fichier outfile.csv lui-même et le tmp/ le sous-répertoire a été créé en écriture universelle, le répertoire du service systemd lui-même dispose de 700 autorisations et appartient à root, nécessitant un accès à Sudo pour récupérer le fichier qu'il contient.

Plutôt que de spécifier le chemin absolu dans MariaDB comme /tmp/outfile.csv et en le spécifiant relativement comme outfile.csv, le fichier a été écrit comme prévu dans le répertoire de données de MariaDB pour la base de données actuellement sélectionnée.

55
Michael Berkowski

Je soupçonne que vous recherchez le fichier sur votre ordinateur client.

SELECT .. INTO OUTFILE écrit le fichier sur la machine serveur.

19
Shlomi Noach

Juste pour l'exemple:

J'ai exécuté la requête ci-dessous dans MySQL Workbench & j'ai trouvé mon fichier dans

SELECT * FROM `db`.`table` INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',';

D:\wamp\bin\mysql\mysql5.6.17\data\db\file.csv

Vous pouvez utiliser l'exemple ci-dessous pour définir votre chemin de fichier:

SELECT * FROM `db`.`table` INTO OUTFILE 'C:\\file.csv' FIELDS TERMINATED BY ',';
3
Neeraj Singh

J'ai trouvé mes fichiers INTO OUTFILE, créés avec la commande suivante

select name from users into outfile "name.csv"

à l'emplacement suivant

C:\ProgramData\MySQL\MySQL Server 5.6\data\name.csv

C'est probablement l'emplacement par défaut, car je n'ai jamais rien changé.

2
StackG

Dans le cas où quelqu'un sur OS X a ce problème, mysql installé avec homebrew a une sortie par défaut située à /usr/local/var/mysql/database-name/

1
seeker_of_bacon

+1 à @ michael-berkowski et la réponse j'avais besoin pour windows était (comme il l'a déclaré)

Répertoire de données de MariaDB

pour être précis, le mien était dans le dossier de données pour la base de données nommée "ma base de données"

C:\Program Files\MariaDB 10.3\data\mydatabase

0
WEBjuju

Vous trouvez le fichier dans C:\wamp\bin\mysql\mysql5.5.24\data, mais le nom sera UsersNamecarro.txt si vous avez donné le suivant select * from carro where id_cor<4 INTO OUTFILE 'C:\Users\Name\carro.txt';

Alors écrivez simplement .....OUTFILE 'C:\carro.txt' pour obtenir le fichier appelé carro.txt dans le dossier data

0
Naren