cuốn sách gpt4 ai đã làm

mysql - 在 Mysql 中使用触发器跟踪日志表中数据库的所有 DML/DDL 更改

In lại Tác giả: Walker 123 更新时间:2023-11-28 23:28:13 25 4
mua khóa gpt4 Nike

我想使用一个日志表跟踪特定数据库上发生的所有数据库更改。

我检查了很多解决方案,但它们都为数据库中的每个表提供了一个审计表。我们如何借助触发器在一个表中跟踪它们?

表格列可能有:

  id - primary key
db_name -- DB Name
version, -- Ignore it(i have a column in my table)
event_type, -- DDL/DML command name
object_name, -- Table/Procedure/Trigger/Function name which is changed
object_type, -- TYpe like table,procedure,trigger
sql_command, -- query executed by user
username, -- who executed it
updated_on -- timestamp

Cảm ơn trước.

câu trả lời hay nhất

mysql 中不存在执行 ddl 命令时调用的触发器(因此您可以记录它们)。但您可能想使用 logfiles ,尤其是 The General Query Log :

The general query log is a general record of what mysqld is doing. The server writes information to this log when clients connect or disconnect, and it logs each SQL statement received from clients. The general query log can be very useful when you suspect an error in a client and want to know exactly what the client sent to mysqld.

默认情况下日志是禁用的,启用它可能会降低性能。并且它不会包括间接更改(例如在过程中执行的 ddls)。

如果您可以安装一个插件,一个更易于配置(且性能更高)的替代方案是使用审计插件,参见 MySQL Enterprise Audit ,或任何免费的实现,例如cái này , 或者你可以写 your own , 但它基本上会记录与一般日志相同的内容。

另一个重要的信息来源可能是 information schemaperformance schema .从那里你基本上可以收集你需要的所有信息(特别是 log of recently executed queries )并从中生成你的日志表,但是它需要一些工作来收集你想要的所有数据 - 它不会被操作触发,所以你必须自己定期检查更改(例如,将 INFORMATION_SCHEMA.TABLES 中的数据与保存的副本进行比较,以跟踪添加、删除和重命名的表)。另一方面,定期 mysql_dump 后跟最新版本的 diff 可能会容易得多。

关于mysql - 在 Mysql 中使用触发器跟踪日志表中数据库的所有 DML/DDL 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38435258/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress