我有一台包含大量 mysql 数据库的服务器。最近,以 Root 身份登录时,某些架构已停止显示。
如果我使用该特定数据库的登录,那么我就可以看到它。
此数据库的“所有者”是 root,但 root 看不到的其他数据库则归其他人所有。
似乎我们最近访问和处理的数据库消失了,但现在有超过 5 个数据库不可见。这不是本地缓存,任何使用 root 登录的人都会遇到同样的问题。
答案1
如果你的当前用户()没有说root@localhost
,那么您没有 root 权限,并且不允许以此权限进行连接。
要查看连接后你拥有的实际权限,请运行此命令
SHOW GRANTS;
当你连接到特定数据库时,你应该能够看到
- 该数据库的表
- INFORMATION_SCHEMA 中针对该数据库的元数据
假设你连接到 buyspace_systdb
输出SHOW GRANTS;
很可能会出现这样的情况
GRANT USAGE ON *.* ...
GRANT ALL PRIVILEGES ON buyspace_systdb.* TO ...
如果您从本地服务器内登录,则用户root@localhost
将可以工作。如果您是远程登录,则root@localhost
不允许用户()验证身份当前用户()。这方面的证据在您的问题中的第一个显示中。请注意,您只能看到 information_schema。它实际上将为空,但 information_schema.schemata 除外,它有 1 或 2 个条目。如果root@'%'
存在于 中mysql.user
并且具有与 相同的权限root@localhost
,那么它将被允许查看所有内容,例如root@localhost
。
MySQL 的身份验证方案具有螺旋式下降效应。如果您尝试连接的用户不存在,它将尝试更模糊的用户名(允许使用通配符或有限的权限)。请参阅我的 DBA StackExchange 帖子MySQL 错误:拒绝用户‘a’@‘localhost’访问(使用密码:是) 了解更多详细信息。
结论:您无法root@localhost
从远程位置进行连接