MySQL 8.0 社区版不支持 server_audit 和 audit_log 插件;前者属 MariaDB/Percona,后者仅限企业版;可行方案为切换至 Percona Server 或 MariaDB 并按各自规范配置审计插件。
MySQL 8.0 能不能直接用 server_audit 插件
不能。server_audit 是 MariaDB 和 Percona Server 的插件,不是 MySQL 官方 8.0 社区版原生支持的组件。如果你在 Oracle MySQL 8.0 上执行
,大概率会报错
——文件根本不存在,加载直接失败。
常见错误现象:配置文件里硬加
,重启
mysql
d 后日志里出现
,或者
进程直接崩溃退出。
原因很直接:Oracle MySQL 8.0 的插件 ABI 和符号表与 MariaDB 不兼容,强行复制
文件过去不仅无效,还可能引发段错误。别试了,这条路不通。
MySQL 8.0 社区版怎么装 audit_log 插件(实际可行路径)
Oracle 官方的
插件只随 MySQL Enterprise Edition 发布,社区版默认不带、也不提供下载。你运行
查不到
,或执行
报
,都是正常现象。
实操建议:
先确认现状:
—— 如果没结果,说明真没有
别去第三方网站搜“mysql 8.0 audit_log.so 下载”,99% 是错版本或恶意包
生产环境要审计,有三个可落地的选择:
换用
Percona Server for MySQL 8.0
(开源免费),自带
插件,配置即用
用
MariaDB 10.4+
,改用
插件(注意配置项名、日志格式、参数逻辑全不同)
临时应急:开
+
,但仅限排查,不满足审计合规要求
Percona Server 8.0 上启用 audit_log 的关键配置
Percona Server 8.0 内置
插件,无需编译,但必须按它的规则配,否则日志不写、策略不生效。
必须写进
或
的
段,重启生效:
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
注意点:
防止被
动态卸载,符合等保要求
路径必须是绝对路径,且
用户对父目录有
权限(
)
只读,运行时
无效;JSON 格式需用
解析,别指望人眼扫读
SELinux 开着时,要加策略:
,再
server_audit 在 MariaDB 10.4+ 的最小可用配置
如果你已用 MariaDB,这才是
的正确打开方式。它和 MySQL 的
完全是两套体系,参数名、事件类型、日志结构都不互通。
配置前先验证插件存在:
最小可用配置(写入
):
容易踩的坑:
默认是
,不显式设为
,日志文件会创建但永远为空
默认只含
,不加
就看不到
设
却没启
服务,插件初始化直接失败
日志路径权限不对时,mysqld 不报错,只是静默跳过写日志 —— 必须检查
和
(SELinux)
真正难的不是配哪几行,而是分清你用的到底是 MySQL、Percona 还是 MariaDB —— 底层不一致,抄错配置就等于白干。
INSTALL PLUGIN server_audit SONAME 'server_audit.so'Can't open shared library 'server_audit.so'plugin_load_add = server_audit.soPlugin 'server_audit' init function returned errormysqld.soaudit_logSHOW PLUGINS;audit_logINSTALL PLUGIN audit_log SONAME 'audit_log.so'Plugin 'audit_log' is not loadedSELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'audit_log';audit_logserver_auditgeneral_loglog_output = 'TABLE'audit_log/etc/my.cnf/etc/my.cnf.d/audit.cnf[mysqld]audit_log = FORCE_PLUS_PERMANENT
audit_log_format = JSON
audit_log_policy = ALL
audit_log_file = /var/log/mysql/audit.log
audit_log_rotate_on_size = 100M
audit_log_flush = ONaudit_log = FORCE_PLUS_PERMANENTUNINSTALL PLUGINaudit_log_filemysqlwrchown mysql:mysql /var/log/mysqlaudit_log_formatSET GLOBALjqsudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"restorecon -Rv /var/log/mysqlserver_auditaudit_logSELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME = 'server_audit';/etc/my.cnf.d/server_audit.cnfplugin_load_add = server_audit.so
server_audit_logging = ON
server_audit_output_type = file
server_audit_file_path = /var/log/mysql/server_audit.log
server_audit_events = CONNECT,QUERY_DDL,QUERY_DMLserver_audit_loggingOFFONserver_audit_eventsCONNECTQUERY_DDLCREATE/ALTER/DROPserver_audit_output_type = syslogrsyslogls -l /var/log/mysqlls -Z