Una risposta rapida, che non richiede la modifica di alcun file di configurazione (e funziona su altri sistemi operativi oltre a Windows), è semplicemente trovare la directory in cui puoi salvare utilizzando:
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.06 sec)
E poi assicurati di usare quella directory nel tuo SELECT
INTO OUTFILE
dell'istruzione clausola:
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Risposta originale
Ho avuto lo stesso problema dall'aggiornamento da MySQL 5.6.25 a 5.6.26.
Nel mio caso (su Windows), guardando il servizio MySQL56 Windows mi viene mostrato che il file di opzioni/impostazioni che viene utilizzato all'avvio del servizio è C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
Su Linux le due posizioni più comuni sono /etc/my.cnf
o /etc/mysql/my.cnf
.
Aprendo questo file posso vedere che secure-file-priv
l'opzione è stata aggiunta sotto [mysqld]
gruppo in questa nuova versione di MySQL Server con un valore predefinito:
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"
Puoi commentare questo (se ti trovi in un ambiente non di produzione) o provare a modificare l'impostazione (di recente ho dovuto impostare secure-file-priv = ""
per disabilitare l'impostazione predefinita). Non dimenticare di riavviare il servizio dopo aver apportato le modifiche.
In alternativa, puoi provare a salvare l'output nella cartella consentita (la posizione può variare a seconda della tua installazione):
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'
È più comune avere valori separati da virgole usando FIELDS TERMINATED BY ','
. Vedi sotto per un esempio (che mostra anche un percorso Linux):
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
ESCAPED BY ''
LINES TERMINATED BY '\n';