我无法获得以下代码来生成任何输出。 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行受影响”更进一步验证结果吗?
答案 0 :(得分:18)
outfile子句生成的文件是在mysql服务器主机上创建的。请确保您正在查看mysql服务器主机,因为您似乎位于客户端主机上,而该客户端主机很可能不是mysql服务器主机。
有关此文档的文档,请参阅有关outfile的部分中的http://dev.mysql.com/doc/refman/5.0/en/select.html。
答案 1 :(得分: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
感谢this blog,我找到了线索。
答案 2 :(得分:0)
听起来您可能遇到了文件权限问题。确保运行mysqld的用户:group具有写入/tmp/test.csv的adaqute权限
有各种各样的服务器守护程序/文件权限风格可以解决问题。大概是基于UNIX的,你可以:chgrp mysqldGROUP / tmp
但是这看起来很容易 - 你的服务器以某种方式配置,所以你适应它。 mysqld进程应该只能从少数几个地方读/写。