我刚刚安装了 MySQL 5.5,安装后立即要求我通过执行以下两个命令来设置 root 密码:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h linux-opxd password 'new-password'
或者
/usr/bin/mysql_secure_installation
我执行了第一个命令——OK。这次我执行了第二个命令,但出现错误:
错误:‘拒绝用户‘root’@‘localhost’访问(使用密码:否)’
我重新执行了第一个(为了检查)——错误如上。
因此,我执行了mysql_secure_installation
。一切顺利,我的密码曾是识别成功。因此我再次执行了前两个命令 — — 再次出现错误。
再检查一下:
mysql --user=root
与上面的错误相同。
我尝试使用 mysql 身份验证重置密码,我也尝试过/usr/bin/mysql_upgrade -u root -p
——尝试以 root 身份启动 mysql 控制台时仍然出现错误。
因此,最后我关闭了身份验证,连接到控制台并执行了以下操作:
SELECT user();
输出 -- root@
。如果我像这样连接:
mysql --user='root@localhost'
我会得到root@localhost@
。
所以现在看来这不是权限问题,也不是缺少密码或类似的问题,而是无法识别在命令行中给出的用户——mysql@
在末尾附加,这似乎是问题所在(至少在我看来)。
问题是:如何让 MySQL 识别给定的用户?
答案1
您收到的第一个错误:
错误:‘拒绝用户‘root’@‘localhost’访问(使用密码:否)’
表示您可能没有在 mysql 命令中使用 -p 选项。
创建 mysql root 密码后,您应该能够使用以下命令访问 MySql:
mysql -u root -p
系统将提示您输入 MySql root 密码。
如果您想要从其他位置(不同于本地主机)启用访问,您可以使用类似于以下的 SQL GRANT 命令授予权限:
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON databaseName.* TO 'username'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
以类似的方式,您可以通过将“username”@“localhost”更改为:“username”@“someFQDN”、“username”@“IP_address”、“username”@“%”,从其他主机名/IP 地址或任何位置启用 MySql DB 访问。
有关更多信息,我建议:http://dev.mysql.com/doc/refman/5.1/en/adding-users.html。
干杯!
答案2
您在第二个 mysqladmin 命令上收到错误消息的原因是您没有使用在第一个命令中设置的密码向服务器进行身份验证。只需在第二个命令中包含“-p”,并在要求输入密码时输入密码即可。或者更简单的是,只需使用 mysql_secure_installation 命令,因为它会处理它以及其他一些有用的东西。