mysql.user表查得慢是因为权限检查时隐式联查多张权限表且缺乏有效索引,导致全表扫描;MySQL 5.7及以前无缓存,8.0+虽有缓存但仅在FLUSH PRIVILEGES或DDL后重建,非实时更新。mysql.user 表为什么查得慢?直接查 mysql.user 表本身不慢,慢的是每次执行权限检查时隐式触发的多表联查和元数据扫描。MySQL 在用户登录、执行语句、访问数据库对象前,会动态拼接查询去 mysql.user、mysql.db、mysql.tables_priv 等表里捞权限,这些表默认没建有效索引,且 InnoDB 引擎下全表扫描开销明显。常见错误现象:SHOW GRANTS FOR 'u'@'h' 延迟高;新建用户后首次登录卡顿;大量并发连接时 Performance_schema.threads 显示大量线程卡在 checking permissions 状态。MySQL 8.0+ 默认用缓存加速权限检查,但缓存只在用户权限变更(如 FLUSH PRIVILEGES 或 DDL)后重建,不是实时更新mysql.user 表主键是 (Host,User),但权限检查常按 User 单独查,或带通配符 Host(如 '%'),导致索引失效MySQL 5.7 及更早版本无权限缓存,每次检查都走磁盘表,压力更大FLUSH PRIVILEGES 到底要不要执行?绝大多数情况不用------而且不该随便执行。它强制清空权限缓存并重载所有权限表,会阻塞后续所有权限检查请求,造成瞬时雪崩。使用场景仅限两种:UPDATE/INSERT/DELETE 直接改了 mysql 库下的权限表(绕过 GRANT/REVOKE);或确认缓存已损坏(比如改完权限但行为没变,且确定没用 GRANT)。用 GRANT、REVOKE、CREATE USER 等 DDL 修改权限,MySQL 自动更新缓存,无需 FLUSH PRIVILEGES执行 FLUSH PRIVILEGES 后,所有活跃连接的权限不会立即刷新,新连接才生效;已有连接仍用旧缓存,直到下次权限检查点MySQL 8.0+ 的缓存结构更复杂,包含角色继承、密码策略等,FLUSH PRIVILEGES 还可能触发额外校验,耗时更长如何验证权限缓存是否生效?看 performance_schema 里的计数器最直接。缓存命中高,说明系统没频繁回表查权限表。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
GuWenyue1 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%想会飞的蒲公英2 小时前
计算机怎样读取中文文本:编码、清洗与标准化Miao121313 小时前
某海外住宿平台如何在大规模场景下实现指标一致性:Minerva 指标平台实践SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架CodexDave3 小时前
MySQL事务隔离级别与MVCC机制解析深度研习笔记3 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现曾阿伦3 小时前
MongoDB 查询语句备忘手册一叶龙洲4 小时前
wslg打开Ubuntu24.04默认打开图形界面CCPC不拿奖不改名4 小时前
大模型推理架构与开源生态知识整理