跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

mysql如何配置数据审计功能_ServerAudit插件与操作日志记录

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

相关文章