Mysql
 sql >> Database >  >> RDS >> Mysql

Codice di errore:1290. Il server MySQL è in esecuzione con l'opzione --secure-file-priv, quindi non può eseguire questa istruzione

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';