2013-12-11 66 views
0

data.sql包含以下数据tee命令在MySQL批处理文件是不是我有mysql的批处理文件nameed工作

tee /var/lib/MYSQLBACKUP/info.txt; 
USE APR_PHASE_II ; 
INSERT INTO PRODUCTDETAILS (ITEM_CODE,ITEM_DESC) VALUES ('WT002','Water for Injection USP'); 
INSERT INTO PRODUCTDETAILS (ITEM_CODE,ITEM_DESC) VALUES ('WT003','Water for Injection USP'); 

当我使用下面的命令

mysql -u root -ppass < /var/lib/data.sql; 

执行data.sql脚本将数据插入到表产品详细,但由于我们正在执行第一洞发球台命令放到批处理文件就应该将输出重定向到info.txt没有执行的输出存储到info.txt文件中

如果我登录到mysql命令提示符,然后逐个执行批处理文件语句,它会将输出重定向到info.txt,任何人都可以指导我解决这个问题吗?

MySQL的版本是5.1和OS版是Fedora 14

回答

0

批处理模式不产生任何输出(参见“查询行,1行受影响”交互模式),除非出现错误,所以没有什么看到。

但是,在第一个错误时停止并写入消息到STDERR - 与在交互模式下使用source命令形成对比,后者保持运行。

如果使用<重定向应用到mysql命令行客户端的批处理命中错误,则执行将停止,并且shell变量$?将包含非零值。成功时它将包含'0'。

STDERR的流可以使用2>重定向

$ mysql < deliberate_error_in_here.sql 2>err.txt 

没有示出了在控制台上被捕获到一个文件,但退出状态变量被设置为1。

$ echo $? 
1 

该文件I名为“err.txt”包含错误。

$ cat err.txt 
ERROR 1064 (42000) at line 4: You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use near 'foo' 
at line 1 

在Windows,而不是$?你检查%ERRORLEVEL%为非零值,如果出现错误。

这是否是有用的信息,实际上取决于你想要做什么。如果你只是使用批处理模式,但实际上手动这样做,然后使用tee,然后使用source {filename}申请文件可能会更接近您要查找的内容,因为它显示输出,但它不显示正在执行的实际语句,因为您没有真正键入它(它只显示使用source命令,后面是执行每个命令后产生的所有正常输出)。

+0

我有一个问题,所以我不会有状态的批处理文件执行的日志多少查询将被执行成功,多少失败? – user1409935

+0

它将在批处理模式下的第一个错误处停止。如果'$?'值为零,则没有错误。 –