我有mysql批处理文件名为data.sql,它包含以下数据
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,操作系统为fedora 14。
发布于 2013-12-12 00:38:10
批处理模式不会产生任何输出(cf )。"Query,1 Row受影响“(在交互模式下),除非出现错误,所以没有什么可查看的。
但是,它确实在第一个错误时停止并向STDERR写了一条消息--这与在交互模式下使用source命令不同,后者一直在运行。
如果使用<重定向到mysql命令行客户端的批处理遇到错误,则执行将停止,而$?变量将包含一个非零值。它将包含关于成功的“0”。
可以使用STDERR重定向将2>流捕获到文件中。
$ mysql < deliberate_error_in_here.sql 2>err.txt控制台上没有显示任何内容,但退出状态变量设置为1。
$ echo $?
1我命名为"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%是否为非零值,而不是%ERRORLEVEL%。
这是否是有用的信息真的取决于你想要做什么。如果您只是使用批处理模式,但实际上是手动地执行此操作,那么使用tee然后使用source {filename}应用文件可能更接近您要查找的文件,因为它确实显示了输出,但它没有显示正在执行的实际语句,因为您并没有实际键入它(它只显示使用source命令,然后是执行这些命令所产生的所有正常输出)。
https://stackoverflow.com/questions/20519641
复制相似问题