背景
公司要把重要的数据库的操作记录留存,方便查询操作可视化和告警监控等待。更能和其余相同的数据库保持一致。
本文将详细介绍如何通过MariaDB的server_audit插件为MySQL社区版实现完整的审计功能,包括版本兼容性处理、插件配置、日志解析和存储方案。
为什么MySQL社区版需要审计功能?
在公司数据库管理中,审计日志是安全合规和故障排查的重要工具。然而,许多使用MySQL社区版的企业面临一个尴尬的现实:原生的审计功能仅在企业版中提供。根据MySQL官方文档,社区版从5.7.34版本后不再支持第三方审计插件,这给需要合规审计的企业带来了挑战。
技术选型与版本兼容性分析
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| MySQL企业版审计插件 | 官方支持,功能完善 | 需要付费许可 | 预算充足的企业 |
| MariaDB server_audit插件 | 免费开源,功能完整 | 版本兼容性复杂 | MySQL 5.7.34及以下版本 |
| Percona审计插件 | 完全兼容MySQL | 需要迁移到Percona Server | 新建项目或可迁移环境 |
| 触发器+通用日志 | 无需额外组件 | 性能影响大,信息不完整 | 简单审计需求 |
在企业数据管理中,数据库操作审计是安全合规的核心需求。但MySQL社区版存在明显短板:
- 缺乏原生审计功能(仅企业版支持
audit_log插件) - 版本兼容陷阱
- MySQL 5.7.34:最后一个可原生使用MariaDB插件的版本
- MySQL ≥5.7.34 无法使用MariaDB的
server_audit.so插件 - MySQL 8.0 完全移除插件兼容性
- 替代方案选择
- 方案1:MySQL 5.7低版本 + MariaDB插件(需版本匹配)
- 方案2:迁移至Percona Server(免费开源,兼容MySQL 5.6/5.7/8.0且支持审计)
- 方案3:全面迁移到MariaDB
实践建议:在测试环境中验证插件兼容性,生产环境部署前进行完整的回归测试。
环境
环境如下:
MySQL
|
|
Cnetos7
|
|
安装插件
查看插件安装目录
|
|
提取mariadb审计插件并放置插件目录
此处需要注意版本,直接适配核对测试
|
|
mysql安装server_audit.so插件
|
|
查看当前MySQL插件情况
|
|
增加审计目录授权
|
|
开启审计,写入配置文件
|
|
FORCE_PLUS_PERMANENT:防止插件被意外卸载- 日志轮转设置:避免日志文件无限增长
max_allowed_packet:确保大SQL语句能被完整记录
重启mysql生效!
|
|
检查日志状态
|
|
日志格式
|
|
解释这条日志格式
|
|
| 字段编号 | 字段值 | 含义 |
|---|---|---|
| 1 | 20250610 10:42:50 |
时间戳,表示审计事件发生的时间 |
| 2 | test_db01 |
服务器主机名(或 MariaDB 实例名称) |
| 3 | root |
数据库用户名,执行该语句的用户 |
| 4 | 192.168.83.36 |
客户端 IP 地址 |
| 5 | 7853786 |
线程 ID(MariaDB 内部线程号) |
| 6 | 438352985 |
查询 ID,用于区分不同的 SQL 查询 |
| 7 | QUERY |
事件类型(QUERY 表示 SQL 查询) |
| 8 | hxxxdb |
当前数据库名(USE 的数据库) |
| 9 | 'SELECT\n MAX(IF(... |
SQL 语句内容,使用单引号包裹,\n 为换行符 |
| 10 | 0 |
返回值 / 错误码,0 表示成功(无错误) |
审计日志处理系统实现
系统架构设计
|
|
Python处理程序核心逻辑
|
|
我们有上面的日志格式,可以进行如下操作处理
日志监控关键特性:
- 断点续传:通过state文件记录读取位置
- 文件轮转检测:通过inode和dev识别日志切换
- 异常处理:完善的错误捕获和日志记录

|
|
|
|
完整代码
|
|


后记
生产环境建议
| 场景 | 推荐方案 |
|---|---|
| MySQL 5.7.34以下版本 | MariaDB插件方案 |
| MySQL 8.0+ | Percona Server或迁移至MariaDB |
| 审计日志存储 | 独立MySQL实例,与业务库物理隔离 |
| 高频操作环境 | 写入Elasticsearch替代MySQL |
通过server_audit插件+Python监控的组合,可在MySQL社区版低成本实现企业级审计需求。但需注意:
📌 版本兼容性是成功前提,MySQL 8.0用户务必选择Percona/MariaDB 📌 日志清洗环节直接影响分析准确性(如转义符处理) 📌 审计日志存储分离是安全最佳实践
最终效果:
- 所有数据库操作可视化展示
- 实时捕获高危DDL语句
- 满足等保2.0/ISO 27001审计要求