2011-06-13 56 views
15

我正在嘗試使用mysql將查詢結果寫入文件。我在幾個地方看到了關於outfile構造的一些信息,但是它似乎只將該文件寫入到正在運行MySQL的機器上(在這種情況下是遠程機器,即數據庫不在本地機器上)。將sql查詢的結果寫入mysql中的文件

或者,我也嘗試運行查詢並從mysql工作臺結果窗口中抓取(複製/粘貼)結果。這適用於一些較小的數據集,但最大的數據集看起來太大,導致內存異常/錯誤/崩潰。

任何有關此事的幫助將不勝感激。

+0

如果你可以通過你的機器訪問MySQL服務器,你應該能夠通過命令行轉儲查詢結果 - 以防你有一個可用的。 – miku 2011-06-13 16:11:17

回答

30

您可以嘗試從本地cli執行查詢並將輸出重定向到本地文件目標;

Mysql -user -pass -e"select cols from table where cols not null" > /tmp/output 
+2

有沒有某種標誌可以給你ascii結構呢?如+ --------- +等 – 2013-11-20 07:41:56

+1

它應該默認做到這一點。傳遞-s參數應該刪除表格格式。 – eroomydna 2014-03-12 10:31:06

+5

@BigMoney它在CentOS上不適合我。添加'--table'或'-t'強制它添加+ ----- +結構,雖然 – Matthew 2014-06-17 23:06:41

11

這取決於您用來與數據庫進行交互的SQL客戶端。例如,可以使用MySQL命令行界面結合「三通」運算,以輸出到本地文件:

http://dev.mysql.com/doc/refman/5.1/en/mysql-commands.html

tee [file_name], \T [file_name] 

執行上述命令執行SQL和結果之前該查詢將被輸出到該文件。

專門針對MySQL Workbench,這裏有一篇關於Execute Query to Text Output的文章。雖然我沒有看到任何文檔,但有跡象表明,查詢下應該還有一個「導出」選項,儘管這幾乎肯定取決於版本。

+0

不完全確定我遵循。這是否在sql語句的末尾? – Ramy 2011-06-13 16:55:13

+2

不,tee是在執行語句之前運行的命令。 – sciurus 2013-05-31 15:34:32

4

你可以試試這個,如果你想在一個文件中寫MySQL查詢結果。如果您在命令行中運行MySQL查詢

這個例子寫的MySQL查詢結果爲csv文件用逗號分隔格式

SELECT id,name,email FROM customers 
INTO OUTFILE '/tmp/customers.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
+0

問題出在獲取導出到本地機器上。該查詢將CSV保存在與mySQL主機相同的服務器上。 – nightgaunt 2016-10-05 06:58:31

+0

'show variables like'datadir';'查看[目錄](https://stackoverflow.com/a/31558673/673991)該文件將進入。用戶將需要[awesome責任](https:// 'GRANT FILE'特權的stackoverflow.com/a/39963216/673991)。 – 2017-10-14 21:34:43

1

。在這裏,我想你有一個文本文件中的查詢列表,你想在另一個文本文件的輸出。然後你可以使用這個。 [test_2是數據庫名稱]

COMMAND 1

mysql -vv -u root -p test_2 <query.txt> /root/results.txt 2>&1 

哪裏-vv是用於詳細輸出。

如果你使用上面的語句作爲

COMMAND 2

mysql -vv -u root -p test_2 < query.txt 2>&1 > /root/results.txt 

會重定向STDERR到正常位置(即在終端上)和標準輸出到輸出文件,該文件在我的情況是結果。 txt

第一個命令執行query.txt,直到遇到錯誤並停在那裏。

這就是重定向的工作原理。你可以試試

#ls key.pem asdf > /tmp/output_1 2>&1 /tmp/output_2 

這裏key.pm文件存在,asdf不存在。所以,當你的貓的文件將得到以下

# cat /tmp/output_1 
key.pem 
#cat /tmp/output_2 
ls: cannot access asdf: No such file or directory 

但是,如果你修改了此前的說法與此

ls key.pem asdf > /tmp/output_1 > /tmp/output_2 2>&1 

然後你得到的錯誤和輸出output_2

cat /tmp/output_2 

ls: cannot access asdf: No such file or directory 
key.pem