将sql查询的结果写入mysql中的文件

时间:2011-06-13 16:02:47

标签: mysql file-io

我试图使用mysql将查询结果写入文件。我在一些地方看到了关于outfile构造的一些信息,但似乎这只是将文件写入运行MySQL的机器上(在这种情况下是远程机器,即数据库不在我的本地机器上) )。

或者,我也尝试运行查询并从mysql workbench结果窗口中抓取(复制/粘贴)结果。这适用于一些较小的数据集,但最大的数据集似乎太大,导致内存不足/错误/崩溃。

非常感谢任何有关此事的帮助。

5 个答案:

答案 0 :(得分:43)

您可以尝试从本地cli执行查询,并将输出重定向到本地文件目的地;

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

答案 1 :(得分:13)

这取决于您用于与数据库交互的SQL客户端。例如,您可以将mysql命令行界面与“tee”运算符一起使用以输出到本地文件:

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的文章。虽然我没有看到任何文档,但有迹象表明在Query下也应该有一个“Export”选项,尽管这几乎肯定是依赖于版本的。

答案 2 :(得分:9)

如果要在文件中编写MySQL查询结果,可以试试这个。

此示例将MySQL查询结果写入具有逗号分隔格式的csv文件

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

答案 3 :(得分:2)

如果您在命令行上运行mysql查询。在这里,我假设您在文本文件中有查询列表,并且您希望输出在另一个文本文件中。然后你可以用它。 [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重定向到正常位置(即在终端上),将STDOUT重定向到输出文件,在我的例子中是result.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

答案 4 :(得分:0)

mysql -v -u -c根-p &1> /media/sf_Share/results.txt 这对我有用。由于我希望脚本中的注释也能反映在报告中,因此我添加了一个标志-c