2012-01-26 98 views
8

我需要將表中的數據導出到csv。我有以下結構(不是我的表,但用於演示目的)在mysql導出後找不到文件

CREATE TABLE `mytable` (
    `id` int(11) DEFAULT NULL, 
    `mycolumn` varchar(25) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

數據(約3000條記錄)。現在我想一些出口的這些記錄(從劇本我通過的cronjob運行)

SELECT * INTO OUTFILE '/tmp/mytable.sql' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM mytable; 

它表明:

Query OK, 3 rows affected (0.00 sec) 

然後我做的:

ls: cannot access /tmp/mytable.sql: No such file or directory 

哪裏是我的文件?

+1

有沒有打掉/ tmp文件夾等腳本運行? –

+0

@CornelGhiban否 –

回答

8

當您使用INTO OUTFILE命令時,它將數據導出到服務器的本地文件夾,而不是執行查詢的那個文件夾。

例如:您在您的計算機上(ip:192.168.0.100),並使用mysql命令連接到mysqlserver(ip:192.168.0.101):mysql -uuser -h192.168.0.101 -A database。通過執行SELECT * INTO OUTFILE該文件保存在mysqlserver(ip:192.168.0.101)上,而不是在您的計算機上(ip:192.168.0.100)。

現在,您可以使用創建CSV文件的腳本(在您的cronjob中 - 您選擇所有數據,生成文件並通過scp發送到其他服務器)。

或者 - 您也可以在/shared/上安裝NFS,並且當您自動創建文件時,其他服務器擁有該文件。

或者 - 你可以簡單地在第一臺服務器上運行一個像這樣的bash腳本中的mysql命令。

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv 

來源:http://tlug.dnho.net/node/209

+0

任何首選解決方案? –

+1

如果您必須生成大量數據(如大量文件),NFS纔是一個很好的解決方案。 「生成一個csv文件」可以非常容易地構建,並且可以對它進行定製(像參數等)命令行,非常簡單和快速,但是你必須小心諸如雙引號之類的字符,這可能會有點難以調試(使用SED命令)。 –

+0

我現在看到mysql服務器上的文件,我永遠不會想到謝謝你的幫助,我認爲生病的文件與csv不符。 –