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?
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.
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.
Je soupçonne que vous recherchez le fichier sur votre ordinateur client.
SELECT .. INTO OUTFILE
écrit le fichier sur la machine serveur.
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 ',';
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é.
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 à @ 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
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