Pregunta

No puedo obtener el siguiente código para generar ningún resultado. El usuario de MySQL tiene " all " nivel de concesión, / tmp se puede escribir, la consulta devuelve un 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

¿Debería ver una salida diferente de MySQL en caso de falla?

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

¿Fue útil?

Solución

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

Ver http://dev.mysql.com/doc/refman /5.0/en/select.html en la sección sobre outfile para documentación al respecto.

Otros consejos

Encontré 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 estaba en /usr/lib/systemd/system/mysqld.service.

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

Gracias a este blog , encontré la pista.

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

Existe una gran variedad de tipos de permisos de demonio / archivo de servidor que resolverían el problema. Presumiblemente basado en UNIX, podría: chgrp mysqldGROUP / tmp

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top