2009-06-24 26 views
13

No puedo obtener el siguiente código para generar ningún resultado. El usuario de MySQL tiene el nivel de concesión "all",/tmp es escribible, la consulta devuelve un conjunto de resultados.MySQL seleccionar en archivo de salida/tmp sin salida

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 
[[email protected] ~]# cat /tmp/test.csv 
cat: /tmp/test.csv: No such file or directory 

¿Debo ver una salida diferente de MySQL en caso de error?

¿Puedo verificar el resultado más allá de "1 fila afectada"?

+0

¿Por qué una declaración seleccionada afectaría algo? – futureelite7

+0

Presumiblemente se refiere a la función de archivo en lugar de a la selección. – Andy

Respuesta

17

Los archivos generados por la cláusula outfile se crean en el host del servidor mysql. Asegúrate de que estás buscando en el host del servidor mysql, ya que parece que estás en el host del cliente, que probablemente no sea el host del servidor mysql.

Consulte http://dev.mysql.com/doc/refman/5.0/en/select.html en la sección sobre archivo para la documentación sobre esto.

+0

Gracias Dipin, tiene razón en que este no es el servidor de base de datos. Muchas gracias – Andy

+0

No hay problema. Me alegro de poder ayudar. ¡Aclamaciones! – Dipin

+0

Dipin, acabas de salvarme golpeándome la cabeza toda la noche. ¡Gracias! – jerrygarciuh

0

Parece que se está ejecutando un problema de permisos de archivos. Asegúrese de que el usuario: grupo en el que se está ejecutando mysqld tenga un permiso firme para escribir en /tmp/test.csv

Existe toda una variedad de sabores de daemon/archivo de servidor que resolvería el problema. Presumiblemente basado en UNIX, podría: chgrp mysqldGROUP/tmp

Pero eso lo hace parecer muy fácil: su servidor está configurado de cierta manera, por lo que se adapta a eso. El proceso mysqld realmente solo debería poder leer/escribir desde un puñado de lugares.

10

Me encontré con este problema en Fedora 17 y fue causado por systemd. Creo que es bueno compartir

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 

El culpable fue en /usr/lib/systemd/system/mysqld.service.

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

Gracias a this blog, he encontrado la pista.

+0

Gracias por compartir – blissini