21

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

我尝试停止 mysql servicw,使用跳过授权表选项重新启动,然后在没有密码的情况下登录:

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并重新安装,但我得到了同样的错误。

有什么建议么?

4

6 回答 6

34

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

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

于 2014-01-24T07:43:20.253 回答
7

两种选择:

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

否则,请尝试手册中的这些说明

于 2012-04-26T20:25:25.150 回答
6

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

我发现这个重置mysql密码的指令效果很好。

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

要重置您的 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';

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

同花顺特权;

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

sudo /etc/init.d/mysql 停止

须藤 /etc/init.d/mysql 启动

于 2014-05-03T03:02:44.587 回答
2

`UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; 同花顺特权;

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

于 2014-01-21T08:53:02.333 回答
0

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

于 2014-03-03T02:15:18.307 回答
0

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

  • 无密码登录:

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

  • 更改密码:

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

在MySQL 5.7 参考手册上找到解决方案

于 2016-11-03T08:42:47.577 回答