MySQL select into outfile /tmp 没有输出

Posted

技术标签:

【中文标题】MySQL select into outfile /tmp 没有输出【英文标题】:MySQL select into outfile /tmp no output 【发布时间】:2010-11-05 12:11:15 【问题描述】:

我无法获得以下代码来生成任何输出。 mysql 用户具有“all”授权级别,/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 行”?

【问题讨论】:

为什么 select 语句会影响任何事情? 大概是指outfile函数而不是select。 【参考方案1】:

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

请参阅关于 outfile 部分的 http://dev.mysql.com/doc/refman/5.0/en/select.html 以获取有关此的文档。

【讨论】:

感谢 Dipin,您说得对,这不是数据库服务器。非常感谢 没问题。很高兴我能帮助你。干杯! Dipin 你刚刚救了我一整夜的头。谢谢!【参考方案2】:

我在 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,我找到了线索。

【讨论】:

【参考方案3】:

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

有各种各样的服务器守护程序/文件权限风格可以解决这个问题。大概是基于 UNIX 的,你可以: chgrp mysqldGROUP /tmp

但这让它看起来很容易——你的服务器以某种方式配置,所以你适应它。 mysqld 进程实际上应该只能从少数几个地方读/写。

【讨论】:

以上是关于MySQL select into outfile /tmp 没有输出的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 使用 select into outfile

MySQL select into outfile /tmp 没有输出

如何使用 SELECT INTO OUTFILE 绕过 MySQL Errcode 13?

mysql之导入(LOAD DATA)导出(SELECT ...INTO OUTFILE)语法

mysql之导入(LOAD DATA)导出(SELECT ...INTO OUTFILE)语法

MySQL SELECT INTO OUTFILE 到不同的服务器?