如何重置mysql的root密码?

16

我的phpmyadmin出了一点问题,事实上我不小心删掉了多个用户账户。 由于出现错误后无法连接:

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

我之前在网上做了一些搜索,甚至是技术方面的。

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

这没有起作用,或者我没有理解它是如何工作的。

我使用的操作系统是FreeBSD 8.1,我的PhpMyadmin版本是2.11。

非常感谢您提供答案。

8个回答

20

我在这里总结了我的解决方案:http://snippets.dzone.com/posts/show/13267

sudo stop mysql
sudo mysqld --skip-grant-tables --skip-networking

mysql
mysql> update mysql.user set password = password('your_new_password') where user = 'root';
mysql> flush privileges;
mysql> exit;
sudo mysqladmin shutdown
sudo start mysql

1
请不要多次发布完全相同的答案。如果问题是重复的,请标记它。 - Mat
2
以上代码片段中缺少的部分已在外部摘要中解释。1)运行第一个“sudo mysqld...”后,请切换到另一个终端窗口。2)在运行mysqladmin shutdown时提示输入新密码:sudo mysqladmin shutdown -u root -p - here

6
对于mysql 5.7.16或更高版本,我发现来自mysql.com的这个链接是可行的解决方案。以下是一些与旧版本不同的要点。

1)根据其他参考资料,我使用以下命令在安全模式下运行mysql,这对我来说非常有效(mysql 5.7.16 ubuntu 16.04)。

mysqld_safe --skip-grant-tables --skip-networking

2) 以下的更新语句在后续版本(即5.7及以上版本)中不起作用。

-- NOT Working for 5.7 and later
UPDATE mysql.user SET Password = PASSWORD ('') WHERE User = 'root';
FLUSH PRIVILEGES;

5.7.6及以上版本请使用以下方法

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

如果您使用的是5.7.5或更早版本,则使用以下用户。

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

你应该尝试在回答正文中包含重要部分,并使用链接作为参考。 - mx0

1
我是使用MySQL Server 8,以下是我解决这个问题的方法。
创建一个文件并根据需要命名。我将其命名为reset.txt。将下面的内容放入文件中,但要更改MyNewPass。这将成为您的新SQL密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

停止我的SQL服务器(进入服务并搜索MYSQL,右键单击并停止)

现在在My SQL服务器目录的bin文件夹中打开cmd。在我的情况下,它是

C:\Program Files\MySQL\MySQL Server 8.0\bin

执行以下命令。

mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file="C:\reset.txt' 

注意:我的reset.txt文件在C盘中。给出正确的路径。检查my.ini文件是否在目录中。在我的情况下,它在C:\ProgramData\MySQL\MySQL Server 8.0\my.ini中。
最后,重新启动SQL服务器。使用您的新密码进行检查。

我尝试了这个解决方案,但仍然出现错误,提示我无法连接到数据库。 - wolfblitza
@wolfblitza 当你尝试使用mysqld命令时,是否在管理员命令提示符中尝试过?如果没有,请尝试并让我知道是否出现相同的错误。 - Ravinda Lakshan
是的,我以管理员身份运行了它。 - wolfblitza

0

XAMPP在Windows上的解决方案:

  • 编辑C:\xampp\mysql\bin\my.ini文件,在[mysqld]下面插入skip-grant-tables
  • 从控制面板界面重新启动MySQL
  • 在phpMyAdmin窗口中,从顶部面板选择SQL选项卡。这将打开SQL选项卡,我们可以在其中运行SQL查询。现在在文本区域中键入以下查询,并单击“Go”

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

  • 从my.ini文件中删除skip-grant-tables
  • 从控制面板界面重新启动MySQL

完成!

请注意,mysql root用户密码不必与phpmyadmin密码相同。


0
请按照下面链接中的说明重置您的root密码。您必须在mysql外部执行此操作。
重设MySql密码
忘记MySQL密码可能会给您带来真正的头疼。以下是一些简单的步骤,您可以按照这些步骤在Windows下恢复MySql密码:
停止MySql
在进行下一步之前,您必须停止MySql服务。在Windows环境下,转到“任务管理器”,在“服务”选项卡下找到MySQL并停止它。
写下更改密码的SQL语句
您只需要创建一个文本文件,并将以下两行代码放入其中:UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;将其保存到C:\驱动器下,并将其命名为“mysql-init.txt”。
自己重新启动MySQL
现在是时候重新启动您之前停止的MySQl了,但这次是从命令行操作。 C: > C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txt
完成!
现在您可以使用新密码登录。当您完成后,请删除上一个阶段中创建的文件。
还有一个链接(http://kaziprogrammingblog.osinweb.com/article/showarticle/Resetting-MySql-Password),我在那里解释了同样的事情。
希望这可以帮到你.. :)

0

这是我所做的,它起作用了:
安装(rpm安装)后,执行vi /etc/my.cnf
这将为您提供设置datadir的路径。对于我来说,它是datadir=/var/lib/mysql
在那里添加一行user=root,并删除datadir路径内的所有内容:rm -rf /var/lib/mysql/*
现在输入命令:mysqld --initialize。 一个临时密码会生成在一个位置。为此:
grep "A temporary password" /var/log/*
您将得到一行,其中包含以下内容:
/var/log/mysqld.log:2018-05-01T15:13:47.937449Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &uosjoGfi9:K。所以对于我来说,&uosjoGfi9:K是我的临时密码。
现在执行mysql -u root -p。从上面获取您的临时密码并粘贴。
您将进入mysql cli模式。现在执行:
mysql> use mysql;
您将被要求重置密码: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
运行您的ALTER命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPswd';
完成了。


0

mysql80:

update user SET authentication_string='your password after encode to sha256' where User='root';

0

在我的情况下,这是一个令人沮丧的Windows Server安装(iis/php/mysql),所以我做了以下操作:

第一部分:删除旧的MYSQL:

注意:如果您已经有数据,请备份!

步骤1 从控制面板中卸载MySQL。(您应该知道如何执行此操作)

步骤2 以管理员身份运行命令提示符,并执行以下命令停止和删除MySQL服务。

Net stop MySQL
Sc delete MySQL

步骤3 删除这些文件夹:

C:\Program Files\MySQL
C:\Program Files (x86)\MySQL
C:\ProgramData\MySQL

如果它存在:

C:\Users\[User-Name]\AppData\Roaming\MySQL

PART 2:安装MYSQL

https://dev.mysql.com/downloads/installer/下载安装程序并安装 - MySQL Server 8.0.23。

以管理员身份打开cmd并前往 c:\Program Files\MySQL\MySQL Server 8.0\bin\ 运行。

mysqld --initialize --console
mysqld --install

现在启动服务(在运行面板中键入services.msc)

现在返回控制台运行:

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

就是这样


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