MySQL官方版8.0不支持server_audit插件,它仅属于Percona Server;原生MySQL 8.0企业版提供需授权的audit_log插件;启用server_audit必须使用Percona Server并正确配置参数。

MySQL 8.0 如何启用 server_audit 插件记录所有操作
直接说结论:MySQL 官方版(非 Percona)默认不带 server_audit 插件,它属于 Percona Server for MySQL 的扩展功能;原生 MySQL 8.0 只提供企业版的 Audit Log Plugin(audit_log),且需商业授权。想免费、开箱即用地审计所有 SQL 操作,得换用 Percona Server 或改用其他方案。
为什么 INSTALL PLUGIN server_audit 总报错 Unknown plugin
常见错误现象:ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/server_audit.so' (errno: 2, No such file or directory)。这不是配置问题,是根本没这个文件 —— Oracle MySQL 社区版源码里压根不编译 server_audit。
- Percona Server 才自带
server_audit.so,路径通常为/usr/lib64/mysql/plugin/server_audit.so或/usr/lib/mysql/plugin/server_audit.so - MySQL 8.0.30+ 自带的是
audit_log插件,对应动态库是audit_log.so,但仅企业版可用 - 即使你从别处拷贝了
server_audit.so,MySQL 会因签名/ABI 不匹配拒绝加载
Percona Server 下启用 server_audit 的实操步骤
确认已安装 Percona Server(如 8.0.33-25),不是 Oracle MySQL。插件启用后默认只记录连接/断开,要记录所有语句必须显式开启:
- 编辑
my.cnf,在[mysqld]下添加:plugin_load_add = server_audit.so server_audit_logging = ON server_audit_events = connect,query,table,query_ddl,query_dml,query_dcl server_audit_output_type = file server_audit_file_path = /var/log/mysql/server_audit.log server_audit_file_rotate_now = ON
-
server_audit_events必须显式列出类型,query是核心,否则只记登录不记 SQL - 日志文件路径目录需 MySQL 进程有写权限:
chown mysql:mysql /var/log/mysql/ - 重启 mysqld 后执行
SHOW GLOBAL VARIABLES LIKE 'server_audit%';确认值生效
audit_log(MySQL 企业版)和 server_audit 的关键差异
两者都输出 JSON 格式,但字段、触发时机和性能影响不同:
-
server_audit在语句解析后、执行前记录(含失败语法错误),audit_log在执行完成后才写入(失败语句可能不记录) -
server_audit的query_dml包含INSERT/UPDATE/DELETE,但不含SELECT—— 想记 SELECT 得加query,但会显著增加日志量 -
server_audit_file_rotate_on_size和server_audit_file_rotations控制轮转,但不支持按天切分,需配合 logrotate - 高并发下开启全量
query审计会导致明显性能下降,建议仅在排障或合规检查时临时启用
真正上线前务必在测试环境压测 IO 和延迟变化,审计日志本身也是数据库负载的一部分。











