有没有办法将查询和输出记录到文件中?

时间:2014-04-25 06:47:35

标签: mysql batch-processing

我的情况如下:一个外部方提供了一个包含数千个查询的巨大SQL文件。这些包括更新,插入,子查询等。这些查询是在第三方软件中组装的(我认为是Excel,但我可能会弄错)。

因此,许多查询往往会失败,整个批处理需要成功而没有一个错误。我使用mysql source file.sql来执行查询,并且我使用mysql tee log.txt将输出记录到txt文件。

然而,事实证明这是不够的,因为这是我得到的输出:

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

ERROR 1242 (21000): Subquery returns more than 1 row
Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

它有点像在大海捞针。我必须统计所有前面的日志消息,以确定哪个确切的查询失败。

有没有办法获取日志文件包括查询?或者有其他方式有效地做到这一点吗?

  • 小批量执行不是一种选择。 (这需要很长时间。)
  • 在命令行上执行所有这些操作都不是。 (消息飞得太快,无法读取或捕获所有消息。)

2 个答案:

答案 0 :(得分:2)

如果用-v--verbose标志打开mysql客户端,它将回显语句和输出。

$ mysql -v
mysql> tee output.txt
mysql> source myscript.sql

更新

请注意--tee选项(或tee命令)的文档:

  

Tee功能仅适用于交互模式。

这意味着它在您运行脚本时不起作用,并且记录了此限制。换句话说,如果您正在使用source,它会起作用,但如果您这样做,它就不起作用:

$ mysql -v --tee output.txt < myscript.sql

答案 1 :(得分:1)

您可以为每个语句按照以下方式准备查询脚本:

echo "update mytable set col1='value' where id='id'" >> C:\Backup\error.txt
update mytable set col1='value' where id='id' >> C:\Backup\error.txt 2>&1

注意:如果你在linux上执行,那么相应地改变路径等。