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

Bad*_*mer 19 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
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

Access denied for user 'root'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)

然后我尝试重置密码:

mysqladmin -u root password 'newpw'
Run Code Online (Sandbox Code Playgroud)

但这也给出了访问被拒绝的错误.

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

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?

Ama*_*Bah 34

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

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

  • 最方便,快捷,优雅的Debian式方式.奇迹般有效 (3认同)
  • 将密码设置为无密码无效.在这种情况下,设置任何密码,登录到mysql和`SET PASSWORD FOR root @ localhost = PASSWORD('');` (3认同)

Mic*_*ior 7

两种选择:

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

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


cha*_*eng 5

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

我发现此指令可用于重置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 &
Run Code Online (Sandbox Code Playgroud)

由于此时您尚未检查用户特权,因此禁用网络是最安全的。在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';
Run Code Online (Sandbox Code Playgroud)

对于这两种方法,一旦收到指示成功查询的消息(受影响的一行或多行),则刷新特权为:

冲洗特权;

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

sudo /etc/init.d/mysql停止

sudo /etc/init.d/mysql开始