基于 145 环境 mysql-0d130fde 实例验证
实例信息:
集群:x.x.x.145命名空间:qfusion-admin插件:Percona Audit Plugin (audit_log.so)MySQL 版本:8.0.35一、当前环境审计配置
1.1 已安装的审计插件
audit_log ACTIVE AUDIT audit_log.so GPL
1.2 当前审计参数
二、Percona Audit Plugin 审计级别详解
Percona Audit Plugin 支持 4 种审计策略(policy):
Policy 对照表
注意:Percona 的 LOGINS 级别仍会记录 Query,这是与 MariaDB Audit Plugin 的区别。
三、各级别详细说明
Level 0: NONE(关闭审计)
设置方式
SET GLOBAL audit_log_policy=NONE;
特点
不记录任何审计信息性能影响:0%适用场景:压测、开发环境验证结果
# 执行查询 SELECT 1; # 审计日志:无新增记录
Level 1: LOGINS(基础审计)
设置方式
SET GLOBAL audit_log_policy=LOGINS;
记录内容
Connect 事件(用户登录)Quit 事件(用户登出)Query 事件(Percona 特性:LOGINS 级别仍记录 SQL)适用场景
生产环境常态等保合规(基础级)审计日志示例
{"name":"Connect","record":"464","timestamp":"2025-12-24T09:48:53Z","user":"audit_test","host":"localhost"} {"name":"Query","record":"466","timestamp":"2025-12-24T09:48:53Z","command_class":"select","sqltext":"SELECT 1"} {"name":"Quit","record":"468","timestamp":"2025-12-24T09:48:53Z","user":"audit_test"}
性能影响
很低(< 3%)Level 2: QUERIES(增强审计)
设置方式
SET GLOBAL audit_log_policy=QUERIES;
记录内容
所有 SQL 查询(SELECT / INSERT / UPDATE / DELETE / DDL)不记录 Connect/Quit 事件适用场景
核心业务库需要 SQL 级别追溯金融/电力/政企系统审计日志示例
{"name":"Query","record":"471","timestamp":"2025-12-24T09:49:03Z","command_class":"select","sqltext":"SELECT 1"} {"name":"Query","record":"472","timestamp":"2025-12-24T09:49:03Z","command_class":"delete","sqltext":"DELETE FROM test_audit.t WHERE id=1"}
性能影响
中等(5% ~ 10%)与 SQL 频率正相关Level 3: ALL(全量审计)
设置方式
SET GLOBAL audit_log_policy=ALL;
记录内容
Connect 事件Quit 事件所有 SQL 查询完整上下文(用户、IP、时间、耗时)适用场景
安全事件追溯应急排查(短期开启)高合规要求环境审计日志示例
{"name":"Connect","record":"474","timestamp":"2025-12-24T09:49:16Z","user":"audit_test","host":"localhost"} {"name":"Query","record":"475","timestamp":"2025-12-24T09:49:16Z","command_class":"select","sqltext":"select @@version_comment limit 1"} {"name":"Query","record":"476","timestamp":"2025-12-24T09:49:16Z","command_class":"select","sqltext":"SELECT * FROM test_audit.t"} {"name":"Quit","record":"477","timestamp":"2025-12-24T09:49:16Z","user":"audit_test"}
性能影响
较高(10% ~ 20%+)日志量快速增长长期开启需谨慎四、审计日志字段说明
JSON 格式字段
五、高级配置技巧
5.1 排除特定账户审计
当前环境已配置排除 root 用户:
-- 查看排除列表 SHOW VARIABLES LIKE 'audit_log_exclude_accounts'; -- 设置排除账户 SET GLOBAL audit_log_exclude_accounts='root@%,root@localhost,repl@%,@';
5.2 只审计特定数据库
-- 只审计特定库 SET GLOBAL audit_log_include_databases='business_db,core_db';
5.3 只审计特定 SQL 类型
-- 只审计 DML SET GLOBAL audit_log_include_commands='insert,update,delete';
5.4 日志轮转配置
-- 单文件最大 512MB SET GLOBAL audit_log_rotate_on_size=536870912; -- 保留 10 个历史文件 SET GLOBAL audit_log_rotations=10;
六、生产环境建议
6.1 通用生产库(99% 场景)
推荐配置:LOGINS + 慢日志
SET GLOBAL audit_log_policy=LOGINS; SET GLOBAL long_query_time=1;
优势
审计连接 + DDL性能稳定易长期运行6.2 核心业务 / 金融 / 电力
推荐配置:QUERIES + 定期清理
SET GLOBAL audit_log_policy=QUERIES;
配合措施
定期归档审计日志集中化日志收集(ELK)设置日志轮转6.3 不推荐配置
-- 长期开启 ALL,配合 audit_log_strategy=ASYNCHRONOUS SET GLOBAL audit_log_policy=ALL; SET GLOBAL audit_log_strategy=ASYNCHRONOUS;
风险
高并发下可能引发 I/O 抖动日志文件占用大量磁盘影响主备同步延迟七、审计 vs 其他日志
八、常见问题
Q1: 为什么 LOGINS 级别还记录 Query?
A: Percona Audit Plugin 的 LOGINS 级别行为与 MariaDB 不同,会同时记录连接和查询。如需只记录连接,需使用 audit_log_exclude_commands 过滤。
Q2: 如何临时关闭审计?
SET GLOBAL audit_log_policy=NONE;
Q3: 审计文件满了怎么办?
审计插件会自动轮转,但建议配置监控:
# 检查审计日志大小 ls -lh /var/log/mysql/audit.log* # 设置定期清理任务 find /var/log/mysql/audit.log* -mtime +30 -delete
Q4: 审计影响有多大?
实测数据(参考):
NONE: 0% 影响LOGINS: ❤️% 影响QUERIES: 5-10% 影响ALL: 10-20%+ 影响(与 QPS 正相关)九、配置模板
等保合规配置(my.cnf)
[mysqld] # 加载审计插件(通常已预装) plugin-load=audit_log.so # 审计策略 audit_log_policy=LOGINS audit_log_format=JSON audit_log_file=/var/log/mysql/audit.log # 轮转配置 audit_log_rotate_on_size=536870912 audit_log_rotations=9 # 排除管理账户(避免日志膨胀) audit_log_exclude_accounts=root@%,root@localhost,repl@%,@ # 性能优化 audit_log_strategy=ASYNCHRONOUS audit_log_buffer_size=1048576 # SQL 记录配置 audit_log_max_sqltext=2048 audit_log_display_query_time=ON
到此这篇关于MySQL 审计级别配置实现步骤的文章就介绍到这了,
