phpmyadmin查看MySQL正在执行的sql和慢日志
一、查看正在执行的 SQL
方法 1:通过 phpMyAdmin 状态页面
-
登录 phpMyAdmin。
-
顶部导航栏点击 「状态」(Status)。
-
在 「服务器」(Server)选项卡下,找到 「进程列表」(Processes)。
-
这里会显示所有当前连接的会话和正在执行的 SQL 语句。
-
重点关注 「Time」 列(执行时间长的可能是问题查询)。
-
方法 2:直接运行 SQL 命令
-
在 phpMyAdmin 的 「SQL」 标签页中执行:
1SHOW FULL PROCESSLIST;
-
结果包含:
-
Id:连接 ID(可用来终止查询)。
-
User:执行查询的用户。
-
Time:已执行时间(秒)。
-
State:当前状态(如 Sending data、Copying to tmp table)。
-
Info:正在执行的 SQL 语句(关键信息)。
-
二、查看慢 SQL
前提条件:已启用慢查询日志
检查慢查询日志是否开启:
1 2 |
SHOW VARIABLES LIKE 'slow_query_log'; SHOW VARIABLES LIKE 'long_query_time'; |
如果未启用,需在 MySQL 配置文件(如 my.cnf)中添加(永久开启):
1 2 3 |
slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 # 记录超过 2 秒的查询 |
然后重启 MySQL:
1 |
systemctl restart mysql |
通过 phpMyAdmin /MySQL执行 SQL 命令(临时生效)
-
登录 phpMyAdmin,进入 SQL 标签页。
-
执行以下命令(需管理员权限):
1 2 3 4 5 6 7 8 9 10 11 12 |
-- 开启慢查询日志(重启 MySQL 后失效) SET GLOBAL slow_query_log = 'ON'; -- 设置慢查询阈值(单位:秒,默认 10) SET GLOBAL long_query_time = 2; -- 可选:指定日志文件路径(需 MySQL 有写入权限) SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log'; -- 验证是否生效 SHOW VARIABLES LIKE 'slow_query_log%'; SHOW VARIABLES LIKE 'long_query_time'; |
注意:
-
这种方式重启 MySQL 后会失效。
-
如果报错 权限不足,需使用上面的方法 修改配置文件。
检查当前慢查询日志配置
1 2 |
SHOW VARIABLES LIKE 'slow_query_log%'; SHOW VARIABLES LIKE 'log_output'; |
-
如果 log_output = FILE,则日志写入文件(默认)。
-
如果 log_output = TABLE,则日志写入 mysql.slow_log 表。
-
如果 log_output = FILE,TABLE,则同时写入文件和表。
方法 1:修改 MySQL 配置文件(推荐)
编辑 MySQL 配置文件(路径可能不同):
1 2 3 |
vim /etc/mysql/my.cnf # 或 vim /etc/mysql/mysql.conf.d/mysqld.cnf |
在 [mysqld] 段落下添加:
1 2 3 4 |
slow_query_log = 1 log_output = TABLE # 关键!将日志输出到表 long_query_time = 2 # 记录超过 2 秒的查询 log_queries_not_using_indexes = 1 # 可选:记录未使用索引的查询 |
重启 MySQL:
1 |
systemctl restart mysql |
方法 2:动态设置(临时生效,重启后失效)
1 2 3 4 5 6 7 8 9 10 11 |
-- 启用慢查询日志 SET GLOBAL slow_query_log = 'ON'; -- 设置日志输出到表 SET GLOBAL log_output = 'TABLE'; -- 设置慢查询阈值(单位:秒) SET GLOBAL long_query_time = 2; -- 可选:记录未使用索引的查询 SET GLOBAL log_queries_not_using_indexes = 'ON'; |
步骤 3:验证是否生效
1 2 3 4 5 |
-- 检查当前日志输出方式 SHOW VARIABLES LIKE 'log_output'; -- 查看慢查询日志表 SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 5; |
-
如果 log_output = TABLE,并且 mysql.slow_log 表中有数据,说明配置成功。
步骤 4:清理慢日志表(可选)
1 2 |
-- 清空慢查询日志表 TRUNCATE TABLE mysql.slow_log; |
注意事项
-
mysql.slow_log 表结构
-
start_time:查询开始时间。
-
query_time:查询耗时。
-
sql_text:完整的 SQL 语句。
-
user_host:执行查询的用户和主机。
-
-
性能影响
-
日志写入表可能比写入文件稍慢,但更方便查询和分析。
-
如果慢查询很多,建议定期清理 mysql.slow_log 表。
-
-
权限要求
-
修改配置需要 SUPER 权限。
-
查询 mysql.slow_log 需要 SELECT 权限。
-
方法 1:通过 phpMyAdmin 直接查询
执行以下 SQL(MySQL的慢日志需要设置TABLE模式):
1 |
SELECT * FROM mysql.slow_log ORDER BY start_time DESC; |
-
-
结果包含:
-
start_time:查询开始时间。
-
query_time:执行耗时。
-
sql_text:慢 SQL 内容。
-
-
方法 2:查看日志文件(需服务器权限)
如果慢查询日志文件已配置,通过命令行查看:
1 |
less /var/log/mysql/mysql-slow.log |
或使用 mysqldumpslow 工具分析:
1 |
mysqldumpslow -s t /var/log/mysql/mysql-slow.log |
三、终止问题查询(可选)
如果发现长时间运行的查询,可以通过连接 ID 终止:
1 |
KILL 连接ID; -- 从 PROCESSLIST 获取 ID |
四、注意事项
-
权限要求:
-
查看 PROCESSLIST 和 slow_log 需要 PROCESS 和 SUPER 权限。
-
-
生产环境慎用 KILL:
-
强制终止查询可能导致数据不一致。
-
-
定期清理慢日志:
-
避免日志文件过大:
12-- 清空慢日志表TRUNCATE TABLE mysql.slow_log;
-