mysql审计日志是记录数据库操作行为的重要工具,能够帮助管理员追踪数据库的访问、修改、删除等各类操作,是数据库安全防护和故障排查的核心依据。不同的审计日志类型对应不同的记录范围和适用场景,合理配置和使用审计日志可以有效提升数据库的安全性和可追溯性。

mysql常见审计日志类型
mysql中内置的审计相关日志主要有三种,各自的功能和适用场景如下:
| 日志类型 | 记录内容 | 适用场景 |
|---|---|---|
| 通用查询日志(general_log) | 所有客户端连接和执行的SQL语句 | 全量操作审计、问题排查 |
| 慢查询日志(slow_query_log) | 执行时间超过阈值的SQL语句 | 性能优化、慢操作审计 |
| 二进制日志(binlog) | 所有数据修改类操作(增删改) | 数据恢复、主从复制、操作溯源 |
通用查询日志的配置与使用
通用查询日志会记录mysql接收到的所有SQL语句,开启后会对数据库性能有一定影响,建议仅在需要排查问题时临时开启。
开启通用查询日志
可以通过命令行临时开启,也可以通过配置文件永久开启。
临时开启方式(重启后失效):
-- 查看通用查询日志状态 SHOW VARIABLES LIKE 'general_log'; -- 开启通用查询日志 SET GLOBAL general_log = 'ON'; -- 设置日志输出路径,默认是数据目录下的主机名.log SET GLOBAL general_log_file = '/var/log/mysql/general.log';
永久开启需要修改mysql配置文件my.cnf(Linux)或my.ini(Windows),在[mysqld]段添加以下配置:
[mysqld] # 开启通用查询日志 general_log = 1 # 日志文件路径 general_log_file = /var/log/mysql/general.log
修改配置后重启mysql服务即可生效。
查看通用查询日志
通用查询日志是文本文件,可以直接用文本编辑器打开查看,也可以通过mysql命令查看:
-- 查看日志文件路径 SHOW VARIABLES LIKE 'general_log_file';
日志内容示例如下:
2024-05-20T10:00:00.123456Z 123 Query SELECT * FROM user WHERE id = 1 2024-05-20T10:00:05.654321Z 123 Query UPDATE user SET name = 'test' WHERE id = 1
慢查询日志的配置与使用
慢查询日志用于记录执行时间超过指定阈值的SQL语句,默认阈值是10秒,可以根据业务需求调整。
开启慢查询日志
临时开启方式:
-- 查看慢查询日志状态 SHOW VARIABLES LIKE 'slow_query_log'; -- 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; -- 设置慢查询阈值,单位秒 SET GLOBAL long_query_time = 2; -- 设置日志文件路径 SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
永久开启配置,在my.cnf的[mysqld]段添加:
[mysqld] # 开启慢查询日志 slow_query_log = 1 # 慢查询阈值,单位秒 long_query_time = 2 # 日志文件路径 slow_query_log_file = /var/log/mysql/slow.log # 记录未使用索引的查询 log_queries_not_using_indexes = 1
分析慢查询日志
mysql自带了mysqldumpslow工具可以分析慢查询日志,常用命令如下:
# 查看耗时最长的10条慢查询 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 查看访问次数最多的10条慢查询 mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
二进制日志的配置与使用
二进制日志记录所有数据修改操作,是数据恢复和主从复制的基础,默认是关闭状态,生产环境建议开启。
开启二进制日志
二进制日志无法通过命令行临时开启,需要修改配置文件,在my.cnf的[mysqld]段添加:
[mysqld] # 开启二进制日志 log_bin = /var/log/mysql/mysql-bin # 服务器唯一ID,主从复制时需要配置 server_id = 1 # 二进制日志格式,可选STATEMENT/ROW/MIXED binlog_format = ROW
重启mysql服务后生效,可以通过以下命令查看二进制日志状态:
-- 查看二进制日志是否开启 SHOW VARIABLES LIKE 'log_bin'; -- 查看所有二进制日志文件 SHOW BINARY LOGS;
查看二进制日志内容
二进制日志是二进制格式,需要用mysqlbinlog工具查看:
# 查看二进制日志内容 mysqlbinlog /var/log/mysql/mysql-bin.000001 # 按时间范围查看 mysqlbinlog --start-datetime="2024-05-20 00:00:00" --stop-datetime="2024-05-20 23:59:59" /var/log/mysql/mysql-bin.000001
审计日志的安全分析实践
通过审计日志可以进行多种安全相关的分析,常见场景如下:
- 异常登录排查:查看通用查询日志中的连接记录,排查非工作时间的异常登录行为
- 高危操作溯源:通过二进制日志定位删除、修改全表等高危操作的执行者和执行时间
- SQL注入检测:查看通用查询日志中是否存在不符合业务逻辑的异常SQL语句
- 性能瓶颈定位:通过慢查询日志找到执行耗时的SQL,进行索引优化或SQL改写
注意事项
使用审计日志时需要注意以下几点:
- 审计日志会占用磁盘空间,需要定期清理过期日志,避免磁盘占满
- 通用查询日志对性能影响较大,生产环境不要长期开启
- 审计日志包含敏感操作信息,需要设置合理的文件权限,避免未授权访问
- 如果需要更细粒度的审计,比如记录特定表的访问操作,可以考虑使用mysql的企业版审计插件或者第三方开源审计工具
合理配置和使用mysql审计日志,能够有效提升数据库的安全防护能力,在出现安全事件时可以快速定位问题根源,保障数据资产的安全。
mysql_audit_logbinloggeneral_logslow_query_log修改时间:2026-06-22 02:12:21