在MySQL中,可以通过以下几种方式查看接收到的SQL语句,适用于性能分析、审计或故障排查:
1. 通用日志(General Query Log)
记录所有收到的SQL语句(包括语法错误的语句),但对性能有较大影响,建议临时开启:
-- 查看当前状态(默认关闭)
SHOW VARIABLES LIKE 'general_log%';
-- 开启通用日志(重启后失效)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log'; -- 指定日志路径
-- 关闭
SET GLOBAL general_log = 'OFF';
注意:日志会快速增长,需定期清理或限制文件大小。
2. 慢查询日志(Slow Query Log)
记录执行时间超过阈值的SQL(默认10秒):
-- 查看配置
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 设置阈值(秒)
-- 日志路径通常在:/var/lib/mysql/*-slow.log
3. Performance Schema
监控SQL执行历史(需提前配置):
-- 启用events_statements_history(记录最近执行的SQL)
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE 'events_statements_history%';
-- 查看最近执行的SQL
SELECT THREAD_ID, SQL_TEXT FROM performance_schema.events_statements_history;
4. Binlog(二进制日志)
记录所有修改数据的SQL(用于主从复制/恢复):
SHOW BINARY LOGS;
SHOW BINLOG EVENTS IN 'mysql-bin.000001'; -- 需要工具解析详细信息
-- 使用mysqlbinlog工具解析:
mysqlbinlog /var/lib/mysql/mysql-bin.000001 | grep "UPDATE|INSERT|DELETE"
5. MySQL Enterprise Audit Plugin
企业版功能,提供完整的审计能力。
6. TCP层抓包
通过工具监听MySQL端口流量:
tcpdump -i eth0 port 3306 -w mysql_traffic.pcap
用Wireshark或tshark
分析捕获的报文。
选择建议
- 调试/开发:临时开启通用日志。
- 性能优化:优先用慢查询日志和Performance Schema。
- 安全审计:考虑企业版插件或第三方工具如Audit Plugin。
内容由零声教学AI助手提供,问题来源于学员提问