MySQL 审计级别配置实现步骤

 更新时间:2026年03月19日 09:13:51   作者:喝醉酒的小白  
本文主要介绍了MySQL 审计级别配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

基于 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 当前审计参数

参数说明
audit_log_policyALL当前审计级别(全量)
audit_log_formatJSON日志格式
audit_log_file/var/log/mysql/audit.log日志文件路径
audit_log_rotate_on_size536870912 (512MB)日志轮转大小
audit_log_rotations10保留日志文件数量
audit_log_strategyASYNCHRONOUS异步写入策略
audit_log_buffer_size1048576 (1MB)缓冲区大小
audit_log_max_sqltext2048SQL最大记录长度
audit_log_exclude_accountsroot@%,root@localhost,repl@%,@排除审计账户
audit_log_display_query_timeON显示查询耗时

二、Percona Audit Plugin 审计级别详解

Percona Audit Plugin 支持 4 种审计策略(policy)

Policy 对照表

Policy等级审计内容
NONELevel 0关闭审计
LOGINSLevel 1连接事件 + 默认查询记录
QUERIESLevel 2所有 SQL 查询(不含连接)
ALLLevel 3连接 + 查询(完整审计)

注意: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 格式字段

字段说明
name事件类型(Connect/Query/Quit/Table/Audit)
timestampUTC 时间戳
connection_id连接 ID
user执行用户
host连接来源主机
ip客户端 IP
db数据库名
command_classSQL 类型(select/insert/update/delete/drop等)
sqltext完整 SQL 文本
status执行状态码(0=成功)
start_time查询开始时间(微秒)
end_time查询结束时间(微秒)

五、高级配置技巧

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 其他日志

日志类型安全合规数据恢复性能分析SELECT记录
审计日志可选
binlog
慢日志仅慢SQL

八、常见问题

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 审计级别配置实现步骤的文章就介绍到这了,更多相关MySQL 审计级别配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL如何查看数据库连接数

    MySQL如何查看数据库连接数

    本文介绍了在MySQL中查看数据库连接数的多种方法,包括使用SHOWSTATUS命令、查询information_schema数据库、使用SHOWPROCESSLIST命令、查看最大连接数以及使用性能模式,每个方法都有详细的示例和注意事项,帮助你有效地监控和管理数据库连接
    2024-11-11
  • pt-kill 常用杀进程参数介绍

    pt-kill 常用杀进程参数介绍

    这篇文章主要介绍了pt-kill 常用杀进程参数介绍,需要的朋友可以参考下
    2016-04-04
  • mysql 字符串长度计算实现代码(gb2312+utf8)

    mysql 字符串长度计算实现代码(gb2312+utf8)

    PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员。下面简要的剖析一下PHP对中文字符串长度的处
    2011-12-12
  • MySQL中查询当天数据中离时间点最近的数据(两种方法)

    MySQL中查询当天数据中离时间点最近的数据(两种方法)

    在 MySQL 中,你可以使用 ORDER BY 和 LIMIT 语句来查询当天数据中离指定时间最近的数据,本文给大家介绍MySQL中查询当天数据中离时间点最近的数据,感兴趣的朋友一起看看吧
    2023-12-12
  • MySQL自增列解析(Auto_increment)

    MySQL自增列解析(Auto_increment)

    MySQL数据库为列提供了一种自增属性,本文主要介绍了MySQL自增列解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • MySQL5.7.18主从复制搭建(一主一从)教程详解

    MySQL5.7.18主从复制搭建(一主一从)教程详解

    MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。这篇文章主要介绍了MySQL5.7.18主从复制搭建(一主一从)教程详解,需要的朋友可以参考下
    2017-08-08
  • 简单谈谈MySQL优化利器-慢查询

    简单谈谈MySQL优化利器-慢查询

    分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”
    2017-01-01
  • MySQL无法启动1067错误的又一种解决方法(机房断电)

    MySQL无法启动1067错误的又一种解决方法(机房断电)

    今早在对一张table 创建primay key过程中发生了断电,当电脑再次启动时候,发现mysql 服务无法启动,使用 net start 提示 1067错误,折腾了2个小时无法解决,后来只能通过手工删除数据文件,日志文件,再启动服务,然后导入数据来完成
    2013-01-01
  • MySql 8.0及对应驱动包匹配的注意点说明

    MySql 8.0及对应驱动包匹配的注意点说明

    这篇文章主要介绍了MySql 8.0及对应驱动包匹配的注意点说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySQL中出现乱码和表格不对齐的解决办法

    MySQL中出现乱码和表格不对齐的解决办法

    这篇文章给大家介绍了MySQL中出现乱码和表格不对齐的解决办法,文中通过代码和图文讲解的非常详细,对大家的解决MySQL中出现乱码和表格不对齐有一定的帮助,需要的朋友可以参考下
    2024-02-02

最新评论