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

Ram*_*amy 29 mysql file-io

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

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

任何有关此事的帮助将不胜感激.

ero*_*dna 48

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

mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
Run Code Online (Sandbox Code Playgroud)

  • @BigMoney在CentOS上也不适合我.添加`--table`或`-t`会强制它添加+ ----- +结构 (6认同)
  • 是否有某种旗帜可以为你提供ascii结构?如+ --------- +等 (2认同)
  • 默认情况下应该这样做。传递-s参数应删除表格式。 (2认同)
  • 我遇到的问题是,如果结果很大,它会在刷新到文件之前将所有数据缓存到内存中,从而占用所有机器内存 (2认同)
  • 您可能还必须选择一个数据库,以便该数据库起作用。例如,通过添加选项-Ddatabase (2认同)

dol*_*phy 14

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

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

tee [file_name], \T [file_name] 
Run Code Online (Sandbox Code Playgroud)

在执行SQL之前执行上面的命令,查询结果将输出到文件.

特别是对于MySQL Workbench,这是一篇关于对文本输出执行查询的文章.虽然我没有看到任何文档,但有迹象表明在Query下也应该有一个"Export"选项,尽管这几乎肯定是依赖于版本的.

  • 不,tee是在执行语句之前运行的命令. (2认同)

gee*_*dev 9

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

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

SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)

  • 问题在于将导出导出到本地计算机。此查询将 CSV 保存在与 mySQL 主机相同的服务器中。 (3认同)

Him*_*han 8

如果您在命令行上运行 mysql 查询。在这里,我假设您在一个文本文件中有查询列表,并且您希望在另一个文本文件中输出。然后你可以使用这个。[ test_2 是数据库名称]

命令 1

mysql -vv -u root -p test_2  < query.txt >  /root/results.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

其中 -vv 用于详细输出。

如果你使用上面的语句作为

命令 2

mysql -vv -u root -p test_2  < query.txt  2>&1 >  /root/results.txt
Run Code Online (Sandbox Code Playgroud)

它将 STDERR 重定向到正常位置(即在终端上)并将 STDOUT 重定向到输出文件,在我的情况下是 results.txt

第一个命令执行 query.txt 直到遇到错误并停止。

这就是重定向的工作原理。你可以试试

#ls key.pem asdf > /tmp/output_1 2>&1 /tmp/output_2
Run Code Online (Sandbox Code Playgroud)

这里 key.pm 文件存在而 asdf 不存在。因此,当您对文件进行分类时,您会得到以下信息

# cat /tmp/output_1
key.pem
#cat /tmp/output_2
ls: cannot access asdf: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是如果你用这个修改前面的语句

ls key.pem asdf > /tmp/output_1 > /tmp/output_2 2>&1
Run Code Online (Sandbox Code Playgroud)

然后你在 output_2 中得到错误和输出

cat /tmp/output_2

ls: cannot access asdf: No such file or directory
key.pem
Run Code Online (Sandbox Code Playgroud)