我最近将我的操作系统从 Mavericks 更新到了 Yosemite,现在我mysql foo
得到了:
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'foo'
这曾经以我的用户名(按照whoami
)作为 mysql 用户运行 mysql。我如何让它再次这样做?(不传递参数-u
)
更新 即使我明确提供了我的用户名,它似乎也会将我的用户名简化为空字符串。
nickshanks$ mysql -u nickshanks foo
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'foo'
nickshanks$ mysql -u "'nickshanks'@'localhost'" foo
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'foo'
如果我以 身份登录到 MySQL 提示符,则一切都正常root
。
答案1
在您的主目录中创建一个文件.my.cnf
。这是具有部分支持的“ini”格式。在客户端部分下设置客户端程序的任何默认值。特定程序的选项可以在与程序名称同名的部分中提供。
选项以程序的长选项命名(不带前两个破折号,因为它们是 getopt(3) 的一部分,而不是名称的一部分)。
因此,一个好的基础是这样的(请注意,它对用户名进行硬编码):
cat <<EOF >~.my.cnf
[client]
user = $USER
database = $USER
EOF
或者,如果您的真实意图是让它与调用程序的用户相同,我怀疑 MySQL 会在没有指定用户的情况下查看某个环境变量。我在文档中找不到这个,但它可能在查看 $USER,这意味着上面的代码片段会创建空值,并会解释升级后行为的变化。
检查env
您的用户名是否存在于变量中。如果没有,请在 shell rc 文件(.bashrc、.zshrc、.profile 或任何适用的文件)中设置 $ USER 和 $USERNAME 作为替代。更改后不要忘记重新登录,或者通过 export 或 setenv 在运行时设置它们。
答案2
我已经搞清楚了。我的普通用户权限是主机“127.0.0.1”(之所以设置,是因为 localhost 在某些情况下无法正确解析)。我以 root 身份登录,并将它们全部更改为 localhost,当以非特权身份登录时,我的所有数据库都会再次显示出来。但 Melvin 尝试远程解决问题,值得称赞。