是否可以从MySQL中的事务回滚中排除某些查询/过程?

时间:2013-09-12 14:05:33

标签: mysql debugging logging stored-procedures

设置

在处理一些相当复杂的过程时,我开始通过存储的日志记录过程将调试信息记录到_debug表中:P_Log('message'),它只调用一个简单的INSERT查询_debug表。

复杂过程包含事务,如果遇到错误则回滚事务。问题是在事务过程中记录的任何调试信息也会回滚。这当然有点反效果,因为您希望能够在过程失败时精确地查看调试日志。


问题

有没有任何方法可以插入_debug而不插入插件?该日志实际上只用于开发,我只会写它,所以我不在乎它是否会违反交易的使用方式。

出于好奇,这通常是如何处理的?它似乎能够从内部事务中写入任意日志信息,检查变量状态等,无论所述事务被回滚,对于调试错误绝对是至关重要的。这里最好的做法是什么?


可能的替代方案

  1. 将日志存储在变量中,并仅在过程结束时写入它们。
    • 这个问题是我希望能够插入任意数量的调试条目。创建一个文本变量并稍后进行分区可能会起作用,但看起来非常h​​acky。
  2. 在mysql中使用一些内置日志
    • 我真的很喜欢这个,如果这意味着我可以随意写任意文字,但到目前为止我还没能找到这样的东西。

1 个答案:

答案 0 :(得分:2)

最简单的方法是将日志表更改为MyISAM。

它不支持交易,会完全忽略它们。当您只插入并从中选择时,MyISAM会更快一些。

我所知道的唯一其他解决方案是为日志创建单独的连接。