在MySQL中打印来自存储过程的debugging信息

有没有在MySQL的方式打印debugging消息到标准输出,可温度或日志文件? 就像是:

  • 在SQLServer中print
  • Oracle中的DBMS_OUTPUT.PUT_LINE

选项1:把它放在你的程序中,当它运行的时候打印“注释”到标准输出。

 SELECT 'Comment'; 

选项2:把它放在你的程序中用它打印一个variables到stdout:

 declare myvar INT default 0; SET myvar = 5; SELECT concat('myvar is ', myvar); 

这个过程运行时打印myvar is 5到stdout。

选项3,创build一个名为tmptable文本列表,并向其中推送消息:

 declare myvar INT default 0; SET myvar = 5; insert into tmptable select concat('myvar is ', myvar); 

你可以把上面的代码放在一个存储过程中,所以你只需要这样写:

 CALL log(concat('the value is', myvar)); 

这节省了一些击键。

选项4,将消息logging到文件

 select "penguin" as log into outfile '/tmp/result.txt'; 

这个命令有非常严格的限制。 您只能将outfile写入磁盘上赋予“其他”组创build和写入权限的区域。 它应该保存到/ tmp目录。

同样,一旦你写出outfile,你不能覆盖它。 这是为了防止破解者根植你的盒子,因为他们有SQL注入你的网站,并可以在MySQL中运行任意命令。

我通常使用存储过程创build日志表以logging到日志表。 从正在开发的程序中调用所需的日志程序。

看看这个问题上的其他post ,这似乎是一个普遍的做法,虽然有一些替代品。

一个解决方法是只使用select而没有任何其他子句。

http://lists.mysql.com/mysql/197901