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

Ale*_*kin 7 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 ;
Run Code Online (Sandbox Code Playgroud)

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

问题是我是否可以切换到企业解决方案(上述audit插件)来获取有关哪些表受级联触发器执行影响的信息.JFYI:我在这里找到的唯一类似问题没有提供适用的答案.

谢谢你的任何建议.

kur*_*ast 1

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

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


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

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


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