一、为什么需要记录SQL执行时间?
在数据库运维和性能分析中,精确掌握SQL语句的执行时刻至关重要。典型应用场景包括:
- 审计追踪:合规要求下的操作记录存档
- 故障排查:定位异常时间段的数据库操作
- 性能分析:关联系统日志与SQL执行时间序列
- 数据恢复:确定误操作发生的时间节点
二、原生方法:启用通用查询日志(General Log)
2.1 配置通用日志
-- 查看当前日志状态
SHOW VARIABLES LIKE 'general_log%';
-- 开启日志记录(临时生效)
SET GLOBAL general_log = 'ON';
-- 设置日志存储方式(FILE/TABLE)
SET GLOBAL log_output = 'FILE';
2.2 永久生效配置
修改my.cnf配置文件:
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql.log
log_output = FILE
2.3 日志格式解析
示例日志条目:
2024-03-20T14:35:22.123456Z 10 Connect user@localhost on db
2024-03-20T14:35:24.567890Z 10 Query SELECT * FROM orders WHERE id=100
2024-03-20T14:35:25.001234Z 10 Quit
各字段说明:
- 精确到微秒的时间戳
- 线程连接ID
- 操作类型(Connect/Query/Quit)
- 执行的SQL语句
2.4 日志管理策略
-- 日志文件轮转
FLUSH LOGS;
-- 清理历史日志
PURGE BINARY LOGS BEFORE '2024-03-01 00:00:00';