2009-06-24 66 views
13

我無法獲得以下代碼來生成任何輸出。 MySQL用戶擁有「全部」授予級別,/ tmp是可寫的,查詢返回結果集。MySQL select into outfile/tmp no output

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 

我應該在失敗的情況下看到MySQL的不同輸出嗎?

我可以比「1行受影響」進一步驗證結果嗎?

+0

爲什麼select語句會影響任何東西? – futureelite7 2009-06-24 12:55:29

+0

推測它是指outfile函數而不是select。 – Andy 2009-06-24 12:56:26

回答

17

由outfile子句生成的文件在mysql服務器主機上創建。請確保你正在查看MySQL服務器主機,因爲它似乎是在客戶端主機上,而這很可能不是mysql服務器主機。

請參閱http://dev.mysql.com/doc/refman/5.0/en/select.html關於outfile的章節以獲取有關此文檔的信息。

+0

謝謝Dipin,你是對的,這不是數據庫服務器。非常感謝 – Andy 2009-06-25 10:02:04

0

聽起來像你可能會遇到文件權限問題。確保mysqld正在運行的用戶組具有足夠的權限寫入/tmp/test.csv

有很多服務器守護進程/文件權限風格可以解決問題。大概是基於UNIX的,你可以:chgrp命令mysqldGROUP/tmp目錄

但是,這使得它顯得如此瞭解快速您的服務器以某種方式配置,讓你適應這一點。 mysqld進程應該只能從少數幾個地方讀/寫。

10

我碰到這個問題了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,我找到了線索。