当前密码未知时重置MySQL root密码

时间:2012-04-26 17:00:44

标签: mysql passwords

我继承了一个安装了mysql的服务器。我没有任何用户的mysql密码,甚至没有root(虽然我有linux root密码)。另外,我只知道另一个用户帐户besdies root,并且没有权限执行任何操作,甚至没有SELECT。

我尝试停止mysql servicw,使用skip grant tables选项重新启动,只是在没有密码的情况下登录:

service mysqld stop
service mysqld start --skip-grant-tables &
mysql -u root

但是得到以下错误:

Access denied for user 'root'@'localhost' (using password: NO)

然后我尝试重置密码:

mysqladmin -u root password 'newpw'

但这也会导致拒绝访问错误。

我还尝试以其他用户身份登录(不使用pw)并执行以下命令:

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

并收到此错误:

ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'

我也试过删除mysql并重新安装,但我得到了同样的错误。

有什么建议吗?

6 个答案:

答案 0 :(得分:34)

尝试sudo dpkg-reconfigure mysql-server-5.5,系统会要求您输入新的root密码。

将5.5替换为您当前的mysql-server版本

答案 1 :(得分:7)

两个选项:

如果你想使用--skip-grant-tables,你可能需要直接启动mysqld,因为选项不一定通过init脚本传递。

否则,请尝试手册中的these instructions

答案 2 :(得分:3)

您需要确保使用sudo命令以root身份运行命令。

我发现这个instruction用于重置mysql密码效果很好。

按照此过程,您将禁用MySQL服务器上的访问控制。所有连接都将具有root访问权限。从网络上拔下服务器或至少禁用远程访问是一件好事。

要重置mysqld密码,请按照以下说明操作:

Stop the mysql demon process using this command :

       sudo /etc/init.d/mysql stop

Start the mysqld demon process using the --skip-grant-tables option with this command

       sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

因为此时您没有检查用户权限,所以禁用网络是最安全的。在Dapper中,/ usr / bin / mysqld ...没有用。但是,mysqld --skip-grant-tables确实。

start the mysql client process using this command

       mysql -u root

from the mysql prompt execute this command to be able to change any password

       FLUSH PRIVILEGES;

Then reset/update your password

       SET PASSWORD FOR root@'localhost' = PASSWORD('password');

If you have a mysql root account that can connect from everywhere, you should also do:

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

Alternate Method:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = 'localhost' AND User = 'root';

And if you have a root account that can access from everywhere:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = '%' AND User = 'root';

对于任何一种方法,一旦收到指示查询成功的消息(受影响的一行或多行),就会刷新权限:

FLUSH PRIVILEGES;

然后停止mysqld进程并以经典方式重新启动它:

sudo /etc/init.d/mysql stop

sudo /etc/init.d/mysql start

答案 3 :(得分:2)

  

`UPDATE mysql.user SET Password = PASSWORD('MyNewPass')WHERE User ='root';   FLUSH PRIVILEGES;

将UPDATE和FLUSH语句分别写在一行上。 UPDATE语句重置所有root帐户的密码,FLUSH语句告诉服务器将授权表重新加载到内存中,以便它通知密码更改。

答案 4 :(得分:0)

对于Ubuntu 16.04上的mysql 5.7.16,这有效:

  • 无密码登录:

    sudo mysqld_safe --skip-grant-tables --skip-networking&

  • 更改密码:

    设置密码' root' @' localhost' =' mypass';

MySQL 5.7 Reference Manual

上找到解决方案

答案 5 :(得分:-1)

在我的情况下发生了同样但我在登录mysql提示时犯了错误。 我是用mysql而不是mysql -u root -p

做的