Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Código de erro:1290. O servidor MySQL está rodando com a opção --secure-file-priv então não pode executar esta instrução


Uma resposta rápida, que não requer que você edite nenhum arquivo de configuração (e funciona em outros sistemas operacionais, além do Windows), é apenas encontrar o diretório que você tem permissão para salvar usando:
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, em seguida, certifique-se de usar esse diretório em seu SELECT INTO OUTFILE da instrução cláusula:
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Resposta original

Eu tive o mesmo problema desde a atualização do MySQL 5.6.25 para 5.6.26.

No meu caso (no Windows), olhar para o serviço MySQL56 Windows me mostra que o arquivo de opções/configurações que está sendo usado quando o serviço é iniciado é C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

No linux os dois locais mais comuns são /etc/my.cnf ou /etc/mysql/my.cnf .



Abrindo este arquivo, posso ver que o secure-file-priv opção foi adicionada sob o [mysqld] group nesta nova versão do MySQL Server com um valor padrão:

secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"

Você pode comentar isso (se estiver em um ambiente de não produção) ou experimentar alterar a configuração (recentemente, tive que definir secure-file-priv ="" para desabilitar o padrão). Não se esqueça de reiniciar o serviço depois de fazer as alterações.

Como alternativa, você pode tentar salvar sua saída na pasta permitida (o local pode variar dependendo da sua instalação):
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'

É mais comum ter valores separados por vírgulas usando FIELDS TERMINATED BY ',' . Veja abaixo um exemplo (mostrando também um caminho do Linux):
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
    FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    ESCAPED BY ''
    LINES TERMINATED BY '\n';