mysql查询历史执行sql记录

本文介绍了如何查看正在执行的SQL语句以及如何开启和管理MySQL的日志记录,包括通过`show processlist`命令和`information_schema.PROCESSLIST`表来检查SQL执行,以及设置`general_log`来开启和关闭日志,调整日志输出到table或file,并查看和清理日志内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、查看正在执行的sql

-- 切换数据库
use information_schema;
-- 查看正在执行的SQL语句
show processlist;

-- 或者直接使用SQL语句查询
select * from information_schema.`PROCESSLIST` where info is not null;

2、开启日志模式,记录所有SQL语句执行记录

首先查看日志是否开启了记录
-- 查看日志功能设置状态
show variables like 'general_log'; 
-- 打开日志记录功能
set global general_log=on; 
-- 关闭日志记录功能
set global general_log=off; 


-- 查看当前日志输出类型:table / file ,可根据需要具体设置
show variables like 'log_output';

-- 设置日志输出至table
set global log_output='table';

-- 日志输出至table模式,查看日志记录
SELECT * from mysql.general_log ORDER BY event_time DESC;

-- 设置日志输出至file
set global log_output='file'; 

-- 查看日志输出文件的保存路径
show variables like 'general_log_file';

-- 修改日志输出文件的保存路径
set global general_log_file='tmp/general.log'; 

-- 日志输出至table模式,清空日志记录
truncate table mysql.general_log;

-- 日志输出至file模式,查看日志记录
cat /tmp/general.log

 

### 查询 MySQL 数据库历史执行 SQL 的方法 在 MySQL 中,可以通过多种方式查询历史执行SQL 语句。以下是几种常见的实现方法: #### 方法一:通过 INFORMATION_SCHEMA.PROCESSLIST 表 如果需要实时监控当前正在运行的 SQL 语句,可以切换到 `information_schema` 数据库查询 `PROCESSLIST` 表中的数据[^1]。 ```sql USE information_schema; SELECT * FROM information_schema.`PROCESSLIST` WHERE info IS NOT NULL; ``` 该方法仅适用于获取当前活动连接上正在执行SQL 语句,无法用于查询过去的 SQL 记录。 --- #### 方法二:启用 General Query Log 功能 为了记录所有的 SQL 执行历史,可以开启 MySQL 的通用查询日志功能 (General Query Log)[^3]。具体操作如下: 1. **确认 general_log 是否已启用** ```sql SHOW VARIABLES LIKE 'general_log%'; ``` 2. **设置 general_log 参数** 如果未启用,则可通过以下命令动态修改配置: ```sql SET GLOBAL general_log = ON; SET GLOBAL log_output = 'TABLE'; -- 将日志存储至表中以便于查询 ``` 3. **查询 history_sql 表** 启用后,所有执行过的 SQL 都会被写入 `mysql.general_log` 表中,可按需筛选: ```sql SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10; ``` 需要注意的是,长期开启此功能可能会显著增加磁盘 I/O 和性能开销,因此建议仅在调试或特定场景下临时启用。 --- #### 方法三:利用 Binary Logs (Binlogs) 当启用了 Binlog 日志时,MySQL 会自动保存所有 DML/DDL 操作的历史记录[^4]。这些记录可用于回溯指定时间段内的 SQL 变更情况。 1. **导出指定时间范围的日志文件** 使用 `mysqlbinlog` 工具提取目标区间的数据: ```bash mysqlbinlog --base64-output=decode-rows -vv \ --start-datetime='2023-04-04 14:00:00' \ --stop-datetime='2023-04-04 15:00:00' \ /path/to/mysql-bin.000043 > /tmp/sql_record.txt ``` 2. **过滤关键字** 对生成的结果进一步处理以定位具体的 SQL 语句: ```bash grep config_json /tmp/sql_record.txt ``` 这种方法适合分析较长时间跨度的操作记录,但不支持读取只读模式下的非事务型变更。 --- #### 方法四:基于慢查询日志 (Slow Query Log) 对于耗时较长或者效率较低的 SQL 请求,也可以借助 Slow Query Log 来追踪其行为特征[^2]。虽然它主要关注性能瓶颈而非全面覆盖每条指令,但在某些情况下仍然非常有用。 启动步骤类似于上述提到的 General Query Log 设置过程,只需调整对应的变量即可: ```sql SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1; -- 定义阈值为超过一秒即视为缓慢请求 ``` 随后查阅相关文档路径下的 `.log` 文件内容完成后续解析工作。 --- ### 总结 综上所述,针对不同需求可以选择合适的方案来满足实际业务要求。例如短期测试推荐采用 Method Two;而对于生产环境则优先考虑 Method Three 并配合其他辅助工具共同协作达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值