我的情况如下:一个外部方提供了一个包含数千个查询的巨大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)
它有点像在大海捞针。我必须统计所有前面的日志消息,以确定哪个确切的查询失败。
有没有办法获取日志文件包括查询?或者有其他方式有效地做到这一点吗?
答案 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上执行,那么相应地改变路径等。