2011-06-13 87 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