Pergunta

Eu não posso obter o seguinte código para gerar qualquer saída. O usuário MySQL tem "tudo" nível de concessão, / tmp é gravável, a consulta retorna um conjunto de resultados.

mysql> SELECT field FROM test_table WHERE condition='test'
    -> INTO OUTFILE '/tmp/test.csv'
    -> FIELDS TERMINATED BY ','
    -> ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n';
Query OK, 1 row affected (0.00 sec)

mysql>
[1]+  Stopped                 mysql
[root@web1 ~]# cat /tmp/test.csv
cat: /tmp/test.csv: No such file or directory

Eu deveria estar vendo saída diferente de MySQL em caso de falha?

Posso verificar o resultado mais longe do que "1 linha afetada"?

Foi útil?

Solução

Os arquivos de gerar pela cláusula outfile são criados no host servidor mysql. Certifique-se de que você está procurando no host do servidor MySQL como parece que você está no host cliente que provavelmente não é o host do servidor MySQL.

http://dev.mysql.com/doc/refman /5.0/en/select.html na seção sobre outfile para documentação sobre isso.

Outras dicas

me deparei com este problema no Fedora 17 e ele foi causado por systemd. Eu acho que é bom para ação.

mysql> select * into outfile '/tmp/z1' from t1;
Query OK, 673 rows affected (0.01 sec)
mysql> select * into outfile '/tmp/z2' from t1;
Query OK, 673 rows affected (0.01 sec)
mysql> select * into outfile '/tmp/z1' from t1;
ERROR 1086 (HY000): File '/tmp/z1' already exists
mysql> Bye

# cat /tmp/z1
cat: /tmp/z1: No such file or directory
# ls -d systemd-*
/tmp/systemd-private-AQEueG
/tmp/systemd-private-AuCNDY
/tmp/systemd-private-TOMNxZ
/tmp/systemd-private-UacrpE
/tmp/systemd-private-yal7lQ
/tmp/systemd-private-ZlRJeN
# ls /tmp/systemd-private-TOMNxZ
z1  z2

O culpado estava em /usr/lib/systemd/system/mysqld.service.

# Place temp files in a secure directory, not /tmp
PrivateTmp=true

Graças a neste blog , eu encontrei a pista.

Parece que você pode estar correndo em um problema permissões de arquivo. Certifique-se de que o usuário: grupo que mysqld está sendo executado sob tem adaqute permissão para gravar /tmp/test.csv

Há toda uma variedade de sabores de permissão servidor daemon / arquivo que iria resolver o problema. Presumivelmente baseado em UNIX, você pode: chgrp mysqldGROUP / tmp

Mas isso faz parecer tão fácil- seu servidor está configurado de uma certa maneira, para que se adaptar a isso. O processo mysqld deve realmente somente ser capaz de leitura / gravação de um punhado de lugares.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top