MySQL社区版不支持server_audit插件,该功能属于Percona Server或MariaDB;Oracle官方版本仅企业版提供audit_log插件,且行为、权限和日志机制均不同。
MySQL 社区版根本没
插件
直接说结论:
不是 MySQL 官方社区版的功能,它属于 Percona Server 或 MariaDB 的扩展插件。你在 Oracle MySQL 8.0 社区版里执行
,99% 会报
——不是配置错,是压根没这个文件。官方源码不编译它,也不提供二进制分发包。
常见误操作:
从网上随便下载一个
拷进
,结果因 ABI 不兼容或签名校验失败被 MySQL 拒绝加载
在 my.cnf 里写了
却没重启
mysql
d,或者重启后没检查
确认状态
误以为 MySQL 8.0.30+ 社区版自带
插件——其实那是企业版专属,社区版即使有
文件,加载也会失败
Percona Server 下启用
的关键配置项
确认你用的是 Percona Server(比如版本号含
或明确标注 Percona),再操作:
必须写在
段下,且路径要对(常见位置:
)
是开关,不设等于白配
必须显式列出;只写
才会记录
,但不含
——想记
得加进去,日志量会陡增
最常用;设为
需额外配 rsyslog 规则
必须是绝对路径,且
目录得
,否则静默失效
改完配置必须重启
,然后连上执行
看值是否生效。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
(企业版)和
的行为差异不能忽略
两者都输出 JSON,但触发时机和覆盖范围完全不同:
在语句解析后、执行前就写日志,所以语法错误、权限拒绝等失败操作也能留下记录;
要等执行完成才落盘,失败语句可能完全不出现
包含所有客户端发来的 SQL,包括
(需手动开启);
默认不记
,只记 DDL/DCL 类变更
支持
这种排除逻辑;
没有用户级过滤,只能靠
降级为只记登录
性能影响上,
的异步写机制更轻量,
在高并发 DDL 场景下 I/O 压力更明显
日志路径、轮转与权限是落地失败的主因
审计日志写不出去,80% 是因为权限或路径问题,不是插件本身故障:
必须是绝对路径,
或
全部无效
MySQL 进程用户(通常是
)必须对日志**目录**有
权限,不只是文件;
不够,得
自动轮转依赖
和
,但
是一次性指令,每次轮转都要手动 SET,不能写进配置文件当开关用
日志暴增时别只盯着删文件——先查
是否误开了
,再确认有没有健康检查脚本高频刷
,这类流量会把日志撑爆
真正上线前,务必用非 root 用户连上去执行几条
和
,再立刻
看是否实时出现,别等出事了才验证。
server_auditserver_auditINSTALL PLUGIN server_audit SONAME 'server_audit.so'ERROR 1126 (HY000): Can't open shared library ... No such file or directoryserver_audit.soplugin_dirplugin_load_add = server_audit.soSHOW PLUGINS;audit_logaudit_log.soserver_audit-25plugin_load_add = server_audit.so[mysqld]/usr/lib64/mysql/plugin/server_audit.soserver_audit_logging = ONserver_audit_events = connect,query,table,query_ddl,query_dml,query_dclquerySELECT/INSERT/UPDATE/DELETESELECTSELECTserver_audit_output_type = filesyslogserver_audit_file_path = /var/log/mysql/server_audit.log/var/log/mysql/chown mysql:mysqlmysqldSHOW GLOBAL VARIABLES LIKE 'server_audit%';audit_logserver_auditserver_auditaudit_logserver_audit_events = querySELECTaudit_log_policy = QUERIESSELECTserver_auditserver_audit_excl_users = rootaudit_logaudit_log_policy = LOGINSserver_auditaudit_logserver_audit_file_path./audit.log~/log/mysqlwtouch /var/log/mysql/audit.log && chown mysql:mysql /var/log/mysql/audit.logchown mysql:mysql /var/log/mysql/server_audit_file_rotate_sizeserver_audit_file_rotationsserver_audit_file_rotate_now = ONserver_audit_eventsquerySELECT 1SELECTCREATE TABLEtail -f /var/log/mysql/server_audit.log