根据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未提供适用的答案。
感谢您的任何建议。
答案 0 :(得分:1)
插件审核旨在注册与服务器的外部交互,用于跟踪入侵和其他相关活动,而不是服务器与自身的交互(如触发器和过程)。
这些内部活动不会按设计在任何审计插件上生成操作。来自开发博客:
http://dev.mysql.com/doc/refman/5.6/en/audit-log-plugin-logging-control.html
MySQL服务器调用审计日志插件,以便在发生可审计事件时编写元素,例如当它完成从客户端收到的SQL语句的执行时。通常,在服务器启动后写入的第一个元素具有服务器描述和启动选项。后面的元素表示客户端连接和断开连接事件,执行的SQL语句等事件。 仅记录顶级语句,而不记录存储程序中的语句,如触发器或存储过程。不记录LOAD DATA INFILE等语句引用的文件内容。
现在,您可以更好地使用自己开发的解决方案。您可以尝试提高其性能,以便在生产环境中打开它。