Une réponse rapide, qui ne vous oblige pas à modifier les fichiers de configuration (et fonctionne sur d'autres systèmes d'exploitation ainsi que sur Windows), consiste simplement à trouver le répertoire dans lequel vous êtes autorisé à enregistrer :
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.06 sec)
Et puis assurez-vous d'utiliser ce répertoire dans votre SELECT
INTO OUTFILE
de l'instruction clause :
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Réponse originale
J'ai eu le même problème depuis la mise à niveau de MySQL 5.6.25 vers 5.6.26.
Dans mon cas (sous Windows), l'examen du service MySQL56 Windows me montre que le fichier d'options/paramètres utilisé au démarrage du service est C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
Sous Linux, les deux emplacements les plus courants sont /etc/my.cnf
ou /etc/mysql/my.cnf
.
En ouvrant ce fichier, je peux voir que le secure-file-priv
l'option a été ajoutée sous le [mysqld]
group dans cette nouvelle version de MySQL Server avec une valeur par défaut :
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"
Vous pouvez commenter ceci (si vous êtes dans un environnement de non-production) ou expérimenter la modification du paramètre (récemment, j'ai dû définir secure-file-priv = ""
afin de désactiver la valeur par défaut). N'oubliez pas de redémarrer le service après avoir apporté des modifications.
Vous pouvez également essayer d'enregistrer votre sortie dans le dossier autorisé (l'emplacement peut varier en fonction de votre installation) :
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Il est plus courant d'avoir des valeurs séparées par des virgules en utilisant FIELDS TERMINATED BY ','
. Voir ci-dessous pour un exemple (montrant également un chemin Linux) :
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
ESCAPED BY ''
LINES TERMINATED BY '\n';