我试图使用mysql将查询结果写入文件。我在一些地方看到了关于outfile构造的一些信息,但似乎这只是将文件写入运行MySQL的机器上(在这种情况下是远程机器,即数据库不在我的本地机器上) )。
或者,我也尝试运行查询并从mysql workbench结果窗口中抓取(复制/粘贴)结果。这适用于一些较小的数据集,但最大的数据集似乎太大,导致内存不足/错误/崩溃。
非常感谢任何有关此事的帮助。
答案 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