Mysql select into outfile / tmp nenhuma saída
-
10-07-2019 - |
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"?
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.