跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何配置MySQL 8.0的审计日志功能_安装server_audit插件

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

相关文章