我需要跟踪数据库中的所有更改:更新、插入、删除。我想知道谁和什么变化。
需要包含列的log表:
实现这一点的最佳方法是什么?
有现成的解决方案吗?
我尝试在update / insert / delete上使用触发器。这是个好办法吗?或者我可能不知道mysql中正确的日志记录?
我的扳机:
CREATE TRIGGER `user_update_trigger`
AFTER UPDATE ON `users`
FOR EACH ROW
BEGIN
DECLARE done int default false;
DECLARE col_name CHAR(255);
DECLARE counter INTEGER(11);
DECLARE column_cursor cursor for SELECT `column_name`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='test'
AND `TABLE_NAME`='users';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open column_cursor;
myloop: loop
fetch column_cursor into col_name;
if done then
leave myloop;
end if;
/*SET @old_val = OLD.{{col_name}}; <------ HOW GET VALUE? */
/*SET @new_val = NEW.{{col_name}};<------ HOW GET VALUE? */
if @old_val <> @new_val then
/*INSERT INTO `log` ....*/
end if;
end loop;
close column_cursor;
END;发布于 2018-02-14 22:54:33
启用mysql审计日志过滤。你可以做这样的事
{
"filter": {
"class": [
{
"name": "connection",
"event": [
{ "name": "connect" },
{ "name": "disconnect" }
]
},
{ "name": "general" },
{
"name": "table_access",
"event": [
{ "name": "insert" },
{ "name": "delete" },
{ "name": "update" }
]
}
]
}
}或
"event": [
{ "name": "select", "log": false },
{ "name": "insert", "log": true },
{ "name": "delete", "log": true },
{ "name": "update", "log": true }
]https://stackoverflow.com/questions/48793577
复制相似问题