我想知道 MySQL 通用查询日志是否有替代方案。我想记录(主要是)DDL 语句,所以我可以跟踪哪些用户DROP
数据库/表等。我知道启用通用查询日志可能会导致一些性能下降。
问题:
- 我可以仅使用常规查询日志记录/过滤 DDL 语句吗
- 是否可以选择在文件系统上为一般查询日志指定位置
- 是否有任何其他选项/解决方案,例如记录到 rsyslog
问候
编辑:2013 年 12 月 6 日星期五 10:57:31 GMT
看起来可以在文件系统上为一般查询日志设置目标,但是由于性能影响,我仍在寻找一些替代方法。
一个)
审计 MySQL 服务器的不同方法:
错误日志
慢查询日志
二进制日志
自定义触发器
使用 MySQL 代理
通用日志 - 您可以通过编辑此通用日志文件变量的值来将通用日志文件路径更改为其他路径
my.cnf
你可以参考这篇博文: http ://serge.frezefond.com/2013/04/how-can-we-audit-a-mysql-server/
二)
使用 MySQL 审计插件
MySQL 和一些 fork 发布了审计插件,如果您担心 MySQL 服务器的安全性,可以尝试它们
1) MySQL 企业审计
Enterprise Audit 使用开放的 MySQL Audit API 来启用标准的、基于策略的监控和记录在特定 MySQL 服务器上执行的连接和查询活动。
2) McAfee 审计插件- 开源
设计重点是安全和审计要求。该插件可以用作独立的审计解决方案,也可以配置为将数据提供给外部监控工具。
3) MariaDB 审计插件
许多企业使用审计法规来确保它们符合法律和行业标准。此类法规通常需要跟踪用户对数据库中数据的访问的过程。
记录(至少)DDL 对性能影响最小的最快方法是使用二进制日志。它以二进制格式存储并默认写入文件系统缓存,因此不会向磁盘添加额外的同步刷新操作。典型的开销约为 5%,如果您使用 5.6 的 binlog 组提交、在 master 级别进行过滤或使用两种主要的 binlog 格式(即使在行模式下,DDL 以语句格式存储),这可能会更少。您可以使用实用程序 mysqlbinlog 将二进制日志转换为人类可读的日志。
binlog的问题在于它不跟踪 usernames 和 hosts,因此它可能对您的目的无用。无论如何,激活二进制日志几乎总是一个好主意。
我认为这里最好的选择是一个审计插件,因为你基本上是在尝试这样做(审计查询和用户)。有几个选项可用,您甚至可以自己编写一个,但我喜欢McAfee 审计插件,它是免费的、开源的,并且对于这种情况来说已经足够好了。这里简要回顾一下如何使用它。您可以将其配置为监视“drop”(和/或任何其他命令)。这应该比激活通用日志成本更低(并且更方便),但我自己没有对其进行基准测试。它可以以 json 格式记录到文件或 UNIX 套接字。这是一个示例输出: