默认 mysql 用户是空字符串。如何将其更改为“me”(即 whoami)

默认 mysql 用户是空字符串。如何将其更改为“me”(即 whoami)

我最近将我的操作系统从 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 尝试远程解决问题,值得称赞。

相关内容