Fork me on GitHub

MySQL层面记录执行的SQL

背景

公司老系统20年祖传代码可读性很低,只有一个能运行的系统,代码很多经过混淆且不规范.所以通过这个方式在本地抓取sql.

1️⃣ 通用查询日志(General Log)

作用:记录所有客户端执行的 SQL(SELECT、INSERT、UPDATE、DELETE……全都记录)
开启方法:

-- 开启日志
SET GLOBAL general_log = 'ON';

-- 指定日志输出到文件(默认也可能是文件)
SET GLOBAL log_output = 'FILE';

-- 查看日志文件位置
SHOW VARIABLES LIKE 'general_log_file';

日志文件里会一行行写明:
• 执行时间
• 用户
• 执行的 SQL

注意事项:
• 生产环境慎用,会严重影响性能
• 只要 general_log = ON 就会记录所有 SQL

image

2️⃣ 慢查询日志(Slow Query Log)

作用:只记录执行时间超过指定阈值的 SQL

-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';

-- 设置阈值,单位秒
SET GLOBAL long_query_time = 1;

-- 查看日志文件
SHOW VARIABLES LIKE 'slow_query_log_file';

特点:
• 只记录慢 SQL,不记录所有 SQL
• 对性能影响小
• 可以用来分析慢查询优化

3️⃣ 写入表而不是文件(可选)

MySQL 可以把日志写进系统表:

-- 把通用日志写进表
SET GLOBAL log_output = 'TABLE';
SELECT * FROM mysql.general_log;

优点:可以直接用 SQL 查询日志
缺点:如果日志量大,表会很快膨胀

⚡ 总结

image

posted @ 2026-03-30 21:26  秋夜雨巷  阅读(6)  评论(0)    收藏  举报