MySQL 8.0+需授予SELECT权限至performance_schema.slow_log表并确保slow_query_log=ON且log_output包含'TABLE';5.7及更早版本不支持该授权,仅能通过系统文件权限或实时监控替代。

MySQL 8.0+ 中授予 SELECT 权限给 performance_schema.slow_log
MySQL 8.0 开始,慢查询日志默认以表形式存于 performance_schema.slow_log(需启用),不再直接写入文件。用户想查它,不是靠文件系统权限,而是数据库级的 SELECT 权限。
必须确保以下两点同时满足:
-
performance_schema系统库已启用(默认开启,但可通过SHOW VARIABLES LIKE 'performance_schema'确认值为ON) - 执行
GRANT SELECT ON performance_schema.slow_log TO 'username'@'host'; - 别忘了
FLUSH PRIVILEGES;—— 虽然多数情况下自动生效,但在某些配置下(如跳过 grant 表启动)必须显式刷新
MySQL 5.7 及更早版本:无法直接 GRANT 查看慢查询日志
这些版本的慢查询日志是纯文件(如 /var/lib/mysql/slow.log),MySQL 服务进程以系统用户(如 mysql)身份写入,不经过 SQL 权限体系。
所以你不能用 GRANT 给出“查看慢日志”的权限——它根本不在 MySQL 权限模型里。可行路径只有两条:
- 让目标用户有操作系统级读取该日志文件的权限(例如把用户加入
mysql组,或调整文件chmod 644) - 改用
SET GLOBAL long_query_time = 0.1;配合SELECT * FROM information_schema.PROCESSLIST或SHOW PROCESSLIST实时抓可疑长事务(非等价替代,但可辅助定位)
启用 slow_log 表并确认日志写入位置
即使授了 SELECT 权限,如果表本身没启用或没写入数据,查出来永远是空的。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
检查并启用的关键步骤:
- 运行
SELECT @@slow_query_log;—— 返回OFF就得先开:SET GLOBAL slow_query_log = ON; - 确认日志输出目标:
SELECT @@log_output;必须包含'TABLE'(如值为'TABLE,FILE'或'TABLE'才行) - 若返回
'FILE',仅靠授表权限无效,必须先切到表输出:SET GLOBAL log_output = 'TABLE'; - 注意:
slow_query_log_file变量只控制文件路径,对slow_log表无影响
常见错误:授权后仍报 Access denied for SELECT
典型现象是执行 SELECT * FROM performance_schema.slow_log; 时被拒绝,即使刚执行过 GRANT。
最常忽略的三个点:
- 用户 host 匹配错误:比如你用
'user'@'localhost'授权,但连接时用的是'user'@'127.0.0.1'—— 这俩在 MySQL 权限系统里是不同用户 -
performance_schema库本身被显式REVOKE过所有权限(极少见,但发生过) - MySQL 启动时加了
--skip-performance-schema,导致整个库不可用,slow_log表根本不存在
查权限是否真正生效,用 SHOW GRANTS FOR 'username'@'host'; 直接看结果,别只信自己刚敲的那条 GRANT。










