调试 MySQL 触发器

2022-01-01 00:00:00 mysql triggers

我喜欢触发器有一个原因 - 它们只是有效.我讨厌触发器有一个原因——当它们不起作用时,忘记尝试调试.哦甜蜜的挫折.

I love triggers for one reason - they just work. I hate triggers for one reason - when they don't work, forget about trying to debug. O the sweet frustration.

基本上,我想查看运行的更新、删除、插入等查询.我想在我的终端或日志中的某个地方看到该查询,确切地了解 MySQL 执行它的方式和时间,以及可能的任何相应的输出/错误.想法/技巧?

Basically, I want to see THE update, delete, insert, etc query that was ran. I want to see that query ... somewhere, in my terminal or a log, exactly how and when MySQL executes it, and possibly any corresponding output/errors. Thoughts/hacks?

我正在尝试使用一些连接来调试更新查询,但没有.我的查询要复杂得多,但为简洁起见,这里有一个示例.

I'm trying to debug an update query with a few joins and what not. My queries are much more complex but for brevity here's an example.

DELIMITER |
CREATE TRIGGER ireallyhateyourightnow AFTER UPDATE ON watch_this_table
FOR EACH ROW BEGIN
 IF (OLD.my_value != NEW.my_value) THEN
  update 
   my_table
  set 
   my_column = NEW.my_value;
 END IF;
END|
DELIMITER ;

以下是一些可能有助于影响建议或答案的附加上下文.同样,我对语义/语法不太感兴趣,而更感兴趣的是看到 MySQL 运行查询,但无论如何,我现在对任何事情都持开放态度.

Here is some additional context that may help influence a suggestion or answer. Again, I'm less interested in semantics/syntax and more interested in seeing MySQL run the query but by all means, I'm open to anything at this point.

  • Strace 不起作用/显示查询.
  • 非复制环境但如果 bin 日志显示触发语句,我肯定会设置它.
  • show full processlist"是否显示触发器执行和/或在其中执行的语句(在运行 show full processlist 后我再也看不到它们,因为 perl 可以运行它,但我可能只是错过了它)?
  • 一般查询日志不显示这些查询(当然不是错误日志).
  • 我不再使用别名了.
  • 创建触发器时没有语法错误.
  • IF 语句有效.
  • 当我将新值插入测试/临时"表并手动运行更新查询时,它可以工作(我什至实际上插入了整个更新查询)
  • 我无法向您展示查询,但正如我刚才提到的,如果有帮助的话,当我手动运行时它会起作用.
  • 我已删除所有错误的字符、制表符、回车符、换行符等.
  • 我认为 MySQL 套接字只会显示本地连接/数据,而不会显示 MySQL 内部工作.
  • MyISAM 所以 INNODB 日志不是一个选项
  • lsof 似乎没有显示任何其他有用的东西.
  • 我在 CentOS 5.5 上使用 MySQL 5.0.77.

推荐答案

您可以 调试触发器 使用 dbForge Studio for MySQL.试用试用版.

You can debug triggers using dbForge Studio for MySQL. Try trial version.

文档中有对触发器调试过程的详细描述:调试调试存储例程如何:启动触发器调试.

There is a detailed description of the trigger debugging process in the documentation: Debugging Debugging Stored Routines How To: Start Trigger Debugging.

相关文章