mysql - 使用 MySQL 记录所有表上的所有事件

标签 mysql sql events logging triggers

我需要记录表database_log中所有表上的所有事件(id、用户、时间戳、表名、old_value、new_value)。

我想我可以使用一个小的 php 脚本动态替换名称的表,在所有表(~25)上创建相同的触发器。但在这种情况下,我可以检索旧值和新值,因为所有表都没有相同的列,所以我不能只连接所有字段以存储在“old_value”和“new_value”中(即使我检索模式中的字段)因为我无法在其上使用 concat() 来选择所有值并将其存储在变量中)。

例如:

 SELECT * into v_myvar FROM my_table where id=OLD.id;
 CALL addLog(v_myvar)

其中 addLog 是获取我的旧值并添加一行其他信息的过程,可以挽救我的生命。

所以,我正在寻找一种性感的解决方案,带有一个触发器和/或一个过程(按表)或一个有用的工具。有人有解决办法吗?

谢谢

最佳答案

SET GLOBAL general_log_file = '/var/log/mysql/mysql.log'; 

通用查询日志是mysqld所做事情的通用记录。当客户端连接或断开连接时,服务器将信息写入此日志,并记录从客户端接收到的每个 SQL 语句。

查看MySql Documentation

关于mysql - 使用 MySQL 记录所有表上的所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783418/

相关文章:

mysql - 无法连接到 '/var/run/mysqld/mysqld.sock'

c# - 如何检查 Access 数据库表中是否存在特定列

c# - 当所有异步方法调用完成时引发事件

java - 简单的java消息调度系统

mysql - MySQL中大表按范围分组

PHP UNIQUE 用户电影评级

Php shell_exec 无法运行 mysql 命令?

sql - Postgres 中单个连接的查询并行化

MySQL 检查带有类别的行是否存在

wpf - 何时释放 UserControl 事件处理程序?