mysql 8.0社区版默认不带audit_log插件,需手动安装percona提供的兼容版本;先查plugin_dir路径和文件是否存在,再确认插件状态,不可复用mariadb插件因abi不兼容;安装后须配置audit_log=force_plus_permanent并指定audit_log_file路径,注意selinux及依赖库。

MySQL 8.0 社区版默认不带 audit_log 插件,升级后发现插件加载失败、报错或根本查不到,不是配置漏了,而是压根没这个文件——得自己补。
确认插件是否真的存在
先别急着 INSTALL PLUGIN,先查它在不在系统里:
- 执行
SELECT @@plugin_dir;拿到 MySQL 实际插件路径(比如/usr/lib64/mysql/plugin/) - 登录服务器,用
ls -l /path/to/plugin_dir/audit_log.so看文件是否存在 - 如果返回
No such file or directory,说明官方包没提供,社区版就是不带 - 再查插件状态:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'audit_log';—— 没结果就等于没装,不是“禁用”,是“不存在”
为什么不能直接复制 MariaDB 的 audit_log.so?
因为 ABI 不兼容,MySQL 8.0 的插件接口和线程模型已重构,MariaDB 的 server_audit.so 或旧版 audit_log.so 加载时大概率报这类错:
ERROR 1126 (HY000): Can't open shared library 'audit_log.so' (errno: 11)-
undefined symbol: _Z9thd_allocP3THDm(函数签名对不上) -
Plugin 'audit_log' init function returned error(ABI断裂导致初始化失败)
这不是权限或路径问题,是二进制层面的不匹配,硬拷贝只会浪费排查时间。
正确获取并安装 Percona 审计插件
目前唯一被验证可在 MySQL 8.0 社区版上稳定运行的开源审计插件,来自 Percona Server 同版本编译的 audit_log.so:
- 下载对应 MySQL 版本的 Percona Server 安装包(例如 MySQL 8.0.37 → 下载 Percona Server 8.0.37 的 tar.gz 包)
- 解压后用
tar -xvf ... --wildcards --no-anchored '*audit_log.so*'提取文件 - 确认文件权限:必须是
-rwxr-xr-x,且属主能被 mysqld 进程读取(常见坑:chown mysql:mysql audit_log.so) - 检查依赖:
ldd /path/to/audit_log.so,重点看是否缺libaudit.so.1(RHEL 8+/AlmaLinux 9 必装audit-libs)或libstdc++.so.6(若报CXXABI_1.3.9 not found,需升级libstdc++) - 重启 mysqld 前,先手动加载测试:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';,成功才继续配参数
加载成功后仍没日志?检查关键配置项
插件加载成功 ≠ 日志开始写入。MySQL 8.0 的 Percona audit_log 插件依赖显式开启和路径设置:
- 必须设
audit_log=FORCE_PLUS_PERMANENT(仅ON不够,重启会失效) - 指定输出路径:
audit_log_file=/var/log/mysql/audit.log,确保目录存在、mysql 用户有写权限 - 注意 SELinux/AppArmor:即使路径对、权限对,也可能被拦截,临时用
setenforce 0测试是否为此原因 - 不要指望
general_log或binlog替代——它们粒度粗、无用户上下文、不可过滤,合规场景下不被认可
最易忽略的一点:Percona 插件的日志格式和字段(如 user、host、query_time)与 Oracle 官方文档描述不同,解析脚本要按实际输出调整,别照着旧文档硬套。











