在触发器级联运行的单个查询期间,哪些表受到影响

时间:2014-05-08 09:26:19

标签: mysql sql triggers

根据MySQL Performance Blog,昨天(5月6日)宣布的新Percona服务器都包括MySQL Audit Plugin的开源版本。

我想要完成的任务是:在单个更新查询运行期间记录受级联触发器执行影响的表。 E. g。执行UPDATE MY_TABLE …时,触发器{BEFORE,AFTER}_UPDATE可能会更新其他表,其中可能有自己的触发器等。

目前我使用国内解决方案;在所有触发器中,我把smth放在:

IF (
        SELECT count(*) 
        FROM  `information_schema`.`ROUTINES` 
        WHERE  specific_name = 'my_own_log' 
          AND  routine_schema = 'my_schema'
) > 0 THEN
    CALL my_own_log ('FOO_TRIGGER', 'Hi, I’m to update MY_TABLE') ;
END IF ;

在制作中,我没有定义my_own_log程序,因为information_schema表格已经过优化,我不会产生任何性能损失。

问题是我是否可以切换到企业解决方案(前面提到的audit插件)来获取有关哪些表受到级联触发器执行影响的信息。 JFYI:我发现的唯一类似问题here未提供适用的答案。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

插件审核旨在注册与服务器的外部交互,用于跟踪入侵和其他相关活动,而不是服务器与自身的交互(如触发器和过程)。

这些内部活动不会按设计在任何审计插件上生成操作。来自开发博客:


http://dev.mysql.com/doc/refman/5.6/en/audit-log-plugin-logging-control.html

MySQL服务器调用审计日志插件,以便在发生可审计事件时编写元素,例如当它完成从客户端收到的SQL语句的执行时。通常,在服务器启动后写入的第一个元素具有服务器描述和启动选项。后面的元素表示客户端连接和断开连接事件,执行的SQL语句等事件。 仅记录顶级语句,而不记录存储程序中的语句,如触发器或存储过程。不记录LOAD DATA INFILE等语句引用的文件内容。


现在,您可以更好地使用自己开发的解决方案。您可以尝试提高其性能,以便在生产环境中打开它。