首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现所有更改的mysql数据库的日志记录?

如何实现所有更改的mysql数据库的日志记录?
EN

Stack Overflow用户
提问于 2018-02-14 18:04:42
回答 1查看 1.7K关注 0票数 0

我需要跟踪数据库中的所有更改:更新、插入、删除。我想知道谁和什么变化。

需要包含列的log表:

  1. 日期。
  2. 表名。
  3. 列。
  4. 旧的价值。
  5. 新的价值。
  6. IP地址。

实现这一点的最佳方法是什么?

有现成的解决方案吗?

我尝试在update / insert / delete上使用触发器。这是个好办法吗?或者我可能不知道mysql中正确的日志记录?

我的扳机:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2018-02-14 22:54:33

启用mysql审计日志过滤。你可以做这样的事

代码语言:javascript
复制
    {
  "filter": {
    "class": [
      {
        "name": "connection",
        "event": [
          { "name": "connect" },
          { "name": "disconnect" }
        ]
      },
      { "name": "general" },
      {
        "name": "table_access",
        "event": [
          { "name": "insert" },
          { "name": "delete" },
          { "name": "update" }
        ]
      }
    ]
  }
}

代码语言:javascript
复制
    "event": [
  { "name": "select", "log": false },
  { "name": "insert", "log": true },
  { "name": "delete", "log": true },
  { "name": "update", "log": true }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48793577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档