Pergunta

Eu estou tentando capturar a saída de uma consulta SQL em MySQL, para um arquivo de texto usando a seguinte consulta.

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';

Eu recebo o seguinte erro.

ERRO 1045 (28000): Acesso negado para o usuário 'username' @ '%' (senha usada: SIM)

Qualquer idéia de onde estou indo errado? É algum problema de permissão relacionadas?

Foi útil?

Solução

OutFile é própria permissão é no mysql.

Se você tiver tudo o que está incluído.

Mas se você só tem uma coleção segura como SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, mas não OUTFILE, "no arquivo de saída" não vai funcionar em consultas.

A razão para isso é que o acesso a arquivos de dentro MySQL, mesmo para fins de gravação, tem certos riscos de segurança, porque se você acessar um arquivo do mysql você pode acessar qualquer arquivo que o usuário mysql tem acesso, ultrapassando assim de usuário baseada em permissões de arquivo.

Para contornar este problema, você pode executar sua consulta diretamente para a saída de qualquer Shell / idioma que você está usando para executar o SQL com.

Aqui está um exemplo * nix

>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

Mas fazer tudo em uma linha sem o "\" ou usar o "\" para escapar da quebra de linha.

O que está acontecendo aqui é que você está executando uma consulta no cliente mysql e é cuspir para fora o resultado, então você está dirigindo a saída para um arquivo. Assim, o arquivo nunca é chamado de dentro mysql, ele é chamado após corridas mysql.

Assim, o uso mysql para obter as informações e depois despejar os dados para o arquivo a partir de seu próprio shell de usuário e você vai ficar bem.

Ou encontrar uma maneira de obter-se a permissão mysql outfile, de qualquer forma.

Outras dicas

Se é o seu sistema (você é admin), e você sabe como para prendê-lo, isto é como você permitir que essas permissões.

USE mysql;
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user';
FLUSH PRIVILEGES;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top