MySQL select into outfile /tmp 无输出。

15

我无法让以下代码生成任何输出。MySQL用户拥有"所有"授权级别,/tmp目录可写,查询返回结果集。

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

如果MySQL发生故障,我是否应该看到不同的输出?

除了“1行受影响”的结果,我还能进一步验证结果吗?


为什么选择语句会影响任何事情? - futureelite7
据推测,这可能是指outfile函数而不是select。 - Andy
3个回答

18

通过outfile子句生成的文件是在MySQL服务器主机上创建的。请确保您正在查看MySQL服务器主机,因为您似乎在客户端主机上,该主机很可能不是MySQL服务器主机。

有关此问题的文档,请参见http://dev.mysql.com/doc/refman/5.0/en/select.html中的outfile部分。


感谢Dipin,你说得对,这不是数据库服务器。非常感谢。 - Andy
Dipin,你刚刚救了我一整晚的头痛。谢谢! - jerrygarciuh

12

我在Fedora 17中遇到了这个问题,原因是systemd。我认为分享一下是很好的。

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

问题出在 /usr/lib/systemd/system/mysqld.service 文件中。

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

感谢这篇博客,我找到了线索。


0

听起来你可能遇到了文件权限问题。请确保运行mysqld的用户:组具有足够的权限写入/tmp/test.csv。

有各种服务器守护程序/文件权限可解决该问题。假设是基于UNIX的,您可以:chgrp mysqldGROUP /tmp

但这使得它看起来很容易-您的服务器以某种方式配置,因此您要适应它。mysqld进程实际上只能从少数几个地方读取/写入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接