我正在使用名为data.sql的mysql批处理文件,其中包含以下数据
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');
当我使用下面的命令执行data.sql脚本时
mysql -u root -ppass < /var/lib/data.sql;
它会将数据插入到表PRODUCTDETAILS中,但是没有将执行输出存储到info.txt文件中,因为我们正在执行第一个tee命令到批处理文件中它应该将输出重定向到info.txt
如果我登录mysql命令提示符然后逐个执行批处理文件语句,它会将输出重定向到info.txt,有人可以指导我解决这个问题吗?
Mysql版本为5.1,OS为fedora 14。
答案 0 :(得分:0)
批处理模式不会产生任何输出(参见&#34;查询OK,1行受影响&#34;在交互模式下),除非出现错误,因此无法看到。
然而,它会在第一个错误上停止并向STDERR
写入消息 - 与在交互模式下使用source
命令相反,后者一直在运行。
如果使用<
重定向应用于mysql
命令行客户端的批处理命中错误,则执行将停止,并且shell变量$?
将包含非零值。它将包含&#39; 0&#39; 0成功。
可以使用STDERR
重定向
2>
流捕获到文件中
$ mysql < deliberate_error_in_here.sql 2>err.txt
控制台上没有显示任何内容,但退出状态变量设置为1。
$ echo $?
1
我命名的文件&#34; err.txt&#34;包含错误。
$ 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
命令,然后是所有正常输出执行每个命令产生的结果)。