密码重置后,使用密码登录时出现“Access denied for user 'root'@'localhost'”错误(使用的是LINUX系统)。

10

我在我的Linux服务器上安装了MySQL,但忘记了它的密码,于是我按照网上找到的方法进行了更改。我的操作如下:

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql --user root mysql
SELECT * FROM user; // I checked if I could access the user table or not
update user SET password = PASSWORD('new_pass') WHERE user = 'root';
flush privileges;
exit

更新查询确实更改了密码,因为它向我显示了受影响的行数和查询 OK 等信息。

然后我重新启动了mysql。

/etc/init.d/mysql stop
/etc/init.d/mysql start

现在,当我使用新密码登录时

mysql -u root -p new_pass

我仍然收到错误消息"ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Yes)"

我是否漏掉了什么?

10个回答

17

通过执行这条语句,我成功地解决了这个问题

sudo dpkg-reconfigure mysql-server-5.5

这将更改根密码。


7

您需要重置密码!以下是Mac OS X(已测试并正常工作)和Ubuntu的步骤:

停止MySQL

$ sudo /usr/local/mysql/support-files/mysql.server stop

在安全模式下启动:

$ sudo mysqld_safe --skip-grant-tables

这是一个持续进行的命令,直到进程完成,因此请打开另一个shell/终端窗口,无需密码登录:
$ mysql -u root

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

启动MySQL

sudo /usr/local/mysql/support-files/mysql.server start

您的新密码是“password”。


1
只有两件不同的事情:要停止服务器,我必须进入“系统偏好设置”->“MySQL”;从MySQL 5.7开始,在用户表中没有密码列 - authentication_string是新列(https://dev59.com/m10a5IYBdhLWcg3wHlik#31122246) - StinkyCat

4
我曾遇到相同的问题。你需要输入mysql -u root -p,而不是 mysql 或者 mysql -u root -p root_password

这对我有用,尽管我参考了http://askubuntu.com/questions/428243/mysql-access-denied-for-user-rootlocalhost - naivecitizen

3

我遇到了同样的问题,@progrAmmar 启发了我,他说:“仔细查看mysql数据库中的用户表”。

我的问题不是 ssl_type,而是第一个字段:Host。我使用以下命令更改了值:

update user set Host='localhost' where User='root' and Host='%';

mysqld_safe --skip-grant-tables 模式下执行。然后它就可以正常工作了。


3
您可能需要清除根帐户的plugin列。在我的新安装中,所有根用户帐户的plugin列都设置为unix_socket。这导致只有系统根用户可以通过套接字登录,因此根SQL帐户被锁定仅限于根Unix帐户。
如果您执行update user set plugin='' where User='root';flush privileges;,则现在应该能够从任何本地主机Unix帐户(使用密码)登录到根帐户。
有关更多详细信息,请参见此AskUbuntu问题和答案

3
在Mac OS上,请按照以下步骤进行:
停止MySQL: $ sudo /usr/local/mysql/support-files/mysql.server stop 在安全模式下启动它: $ sudo mysqld_safe --skip-grant-tables (上面一行是整个命令)
这将是一个持续的命令,直到进程完成,因此打开另一个shell/终端窗口,无需密码登录: $ mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
启动MySQL:
sudo /usr/local/mysql/support-files/mysql.server start
您的新密码为'password'。

2
在我的情况下:
  1. 停止MySQL服务:/etc/init.d/mysql stop
  2. 启动MySQL服务并跳过权限检查:mysqld_safe --skip-grant-tables &

(在新窗口中)

  1. 登录MySQL:mysql -u root
  2. 选择数据库:mysql> use mysql;
  3. 更新用户密码:mysql> update user set authentication_string=password('password') where user='root';
  4. 刷新权限:mysql>flush privileges;
  5. 退出MySQL:mysql> quit
  6. 重启MySQL服务:/etc/init.d/mysql restart

0

实际上,我仔细查看了mysql数据库中的用户表,发现在我之前有人将用户root的ssl_type字段编辑为SSL。

我编辑了该字段并重新启动了mysql,结果非常顺利。

谢谢。


你需要在安全模式下启动MySql,这不需要root密码。一旦登录,你将进入mysql数据库,然后可以发出"select * from user"命令并查看字段。 - progrAmmar

0

可能当前用户不是root,尝试使用sudo mysql -uroot -p,我刚刚成功了。


-1
您可以尝试以下解决方案:-
为了让mysql要求输入密码,您还需要指定-p选项:(尝试在-p和密码之间加入空格)
mysql -u root -p new_password

MySQL访问被拒绝

第二个链接中,有人评论了同样的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接