mysql8开启数据库日志审计功能
·
基础信息
MySQL 8 的审计功能实现方式取决于Mysql的版本(企业版 or 社区版)。企业版自带原生插件audit_log 插件,社区版需借助第三方插件。
早期用社区版 5.7 版本时,MariaDB审计插件通过调整源码适配,基本可兼容覆盖 5.7 绝大部分主流版本。8.0 后,MariaDB 插件不再兼容。但在 2024 年 7 月,Percona 社区发文验证审计插件支持 MySQL 8.0 版本。
环境信息
数据库版本:mysql8.0.37社区版 (Centos7系统)
审计插件版本:从Percona-Server-8.0.37中提取audit_log.so插件
插件获取
下载Percona-Server-8.0.37-29-Linux.x86_64.glibc2.17.tar.gz,然后解压,获取Percona-Server-8.0.37-29-Linux.x86_64.glibc2.17/lib/plugin中的audit_log.so文件,可点此直接获取审计插件。
插件安装
- 登录mysql,执行以下命令获取mysql的插件目录
SHOW GLOBAL VARIABLES LIKE '%plugin_dir%';

2. 将审计插件 audit_log.so文件放到mysql8插件目录中
3. 登录msyql,执行以下命令安装插件:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
4.查看审计相关的变量
show variables like '%audit%';

- 配置持久化参数
编辑 MySQL 配置文件(Linux 为 /etc/my.cnf),在 [mysqld] 段添加以下配置,确保重启后生效:
[mysqld]
plugin-load-add = audit_log.so
# 日志路径(建议独立目录,权限仅 MySQL 可访问)
audit_log_file = /var/log/mysql/audit.log
# 日志格式:JSON(易解析)/ OLD(传统格式)
audit_log_format = JSON
# 审计策略:ALL(全量记录)、LOGINS(仅登录)、QUERIES(仅查询)
audit_log_policy = ALL
# 异步写入策略,降低性能影响
audit_log_strategy = ASYNCHRONOUS
# 日志轮转:按大小触发(单位字节,如 100M=104857600)
audit_log_rotate_on_size = 104857600
# 保留历史日志数量(0 禁用轮转,不建议)
audit_log_rotations = 5
# 排除内置系统账户(可选)
audit_log_exclude_accounts = 'mysql.sys@localhost'
关键参数说明
| Variable_name | Value | 说明 |
|---|---|---|
| audit_log_buffer_size | 1048576 | 审计日志的缓冲区大小,单位为字节 |
| audit_log_exclude_accounts | 指定不记录审计日志的数据库用户 | |
| audit_log_exclude_commands | 指定不记录审计日志的命令类型 | |
| audit_log_exclude_databases | 指定不记录审计日志的数据库 | |
| audit_log_file | audit.log | 审计日志文件名 |
| audit_log_flush | OFF | 控制是否自动刷新审计日志缓冲区到磁盘(OFF 表示关闭自动刷新) |
| audit_log_format | JSON | 审计日志的文件格式 |
| audit_log_handler | FILE | 审计日志的输出方式 |
| audit_log_include_accounts | 指定仅记录这些账号的审计日志 | |
| audit_log_include_commands | 指定仅记录这些命令类型的审计日志 | |
| audit_log_include_databases | 指定仅记录这些数据库的审计日志 | |
| audit_log_policy | ALL | 审计日志的核心记录策略 |
| audit_log_rotate_on_size | 0 | 日志文件自动轮转的触发阈值(单位:字节) |
| audit_log_rotations | 5 | 日志轮转后保留的历史日志文件数量(最多保留 5个) |
| audit_log_strategy | ASYNCHRONOUS | 审计日志的写入策略(ASYNCHRONOUS 表示异步写入) |
| audit_log_syslog_facility | LOG_USER | 指定审计日志发送到系统日志时的 “设备类型”(facility),用于分类系统日志的来源 |
| audit_log_syslog_ident | percona-audit | 指定审计日志在系统日志中的 “标识字符串”(identifier),用于区分不同应用的日志 |
| audit_log_syslog_priority | LOG_INFO | 指定审计日志在系统日志中的 “优先级”(priority),用于标记日志的重要程度 |
审计日志样例
{
"audit_record": {
"name": "Query", //表示审计记录的事件类型
"record": "3912_2026-04-08T04:23:56", //计记录的唯一标识(ID)
"timestamp": "2026-04-08T09:15:40Z", //事件发生的时间戳(UTC 时间)
"command_class": "select", //操作命令类型
"connection_id": "14", //本次数据库连接的唯一会话 ID
"status": 0, //操作的状态码
"sqltext": "select * from db", //SQL查询语句
"user": "root[root] @ [10.7.2.230]", //操作用户
"host": "", //客户端连接的主机名
"ip": "10.7.2.230", //客户端的 IP 地址
"db": "" //登录时指定的默认数据库
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)