在MySQL 5.6中重置ROOT密码

21

我一直在按照这些说明重置本地安装在Windows 7笔记本电脑上的MySQL 5.6root密码。

我停止了服务,创建了init-file,并以管理员身份运行了以下命令:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" --init-file=C:\\MySQL-misc\\mysql-init.txt

我收到了以下警告信息:

2014-02-08 15:44:10 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

由于这只是一个警告,我不确定是否需要修复任何问题,然后重新执行该过程。

目前命令窗口仍在运行且不接受任何输入。我应该强制关闭它还是有其他方法可以优雅地完成该过程?

更新

我关闭了命令窗口并尝试重新启动服务。出现了一个错误。

重启 Windows 后,服务自动启动。新的 root 密码 似乎有效。我成功地使用了需要密码的 Workbench 的各种功能。

因此,这个警告只是一条警告。


@Mr.Radica - 我将其发布为更新。我认为它可能会帮助其他人,所以我没有删除它。 - PM 77-1
做得好。你仍然可以将它放在下面,然后接受它。你解决了最初的问题。;-) - Mr. Radical
我尝试了将近一个小时,按照MySQL手册上的说明操作,但不成功,即使刷新了权限等... 重启电脑后才成功了。 - endo64
谢谢!对于mysql 5.7,您需要使用authentication_string。 - Kervin Ramen
这个视频帮助我在一个生产服务器上更改密码。 - Prem
9个回答

63

在Windows系统中:

0) 关闭服务 mysql56

1) 前往 C:\ProgramData\MySQL\MySQL Server 5.6,注意 ProgramData 是一个隐藏的文件夹

2) 寻找文件 my.ini,打开并在 [mysqld] 下方添加一行 skip-grant-tables,保存

[mysqld]

skip-grant-tables

3) 启动服务 mysql56

4) 正确情况下,您可以访问数据库,运行 mysql

5) 使用以下查询来更新密码

update mysql.user set password=PASSWORD('NEW PASSWORD') where user='root';

注意: 对于更新版本,请使用authentication_string代替password

6) 再次关闭服务,移除skip-grant-tables这行代码并保存,然后重新启动服务。尝试使用您设置的密码登录。


在Mac上:

0) 停止服务

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

1)跳过授权表

sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables

一旦启动,请不要关闭它,并打开一个新的终端窗口

2)进入mysql终端

/usr/local/mysql/bin/mysql -u root

3) 更新密码

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

对于像5.7这样的新版本,请使用

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

4) 运行 FLUSH PRIVILEGES;

5) 运行 \q 退出

6) 启动MySQL服务器

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

因为您没有实际说明在哪里或如何连接以运行更新语句,所以被踩了。请在您的回答中完整地说明。 - Evan Carroll
1
你在第一条(非Mac)指令中忘记了 FLUSH PRIVILEGES?除此之外,这个方法很好用,比MySQL手册上的指令更好。 - knocte
3
需要注意的是,在MySQL 5.7中并没有“password”列,至少我没有找到。可以使用@SatishakumarAwati回答中所提到的“authentication_string”来代替。 - AJ.
ERROR 1054 (42S22): Unknown column 'password' in 'field list' - Csaba Toth
1
@CsabaToth 请尝试使用 authentication_string - Timeless
显示剩余3条评论

6
  • Stop Mysql service by going into Administrative tools > Services
  • Open Start > Run > cmd (Run as administrator)
  • Start the server manually using this line:

    mysqld -P3306 --skip-grant-tables
    
  • In new cmd (Run as administrator) execute :

    mysql -P3306 mysql
    
  • Execute the following query in mysql client:

    update mysql.user set authentication_string=password('new_password') where user='root';
    
这就是全部内容了!

4
问题已经得到解决。
正如我在问题中所述,我按照 MySQL 手册的 说明 进行了操作。
虽然该过程并非完全按照描述进行(这也是我最初发帖的原因),但它仍然奏效了(请参见我的帖子中的 更新 部分)。

非常感谢...很奇怪...对我来说其他答案都不起作用,但这个答案就像斯蒂芬·库里三分球一样有效 ;) - saber tabatabaee yazdi

2

针对MySQL 5.7的更改,更新此答案

0) 关闭服务mysql57

1) 进入C:\ProgramData\MySQL\MySQL Server 5.7,注意ProgramData是一个隐藏文件夹

2) 查找my.ini文件,打开它,在[mysqld]下添加一行skip-grant-tables,保存

[mysqld]

skip-grant-tables

3) 启动服务 mysql57

4) 正确操作后,您可以访问数据库并运行 mysql。

5) 使用下面的查询语句更新密码:

update mysql.user set authentication_string=password('NEW_PASSWORD') where user='root';

6) 关闭服务,删除 skip-grant-tables 这一行并保存,然后重新启动服务。尝试使用您设置的密码进行登录。


1

首先停止mysql服务器,然后按照以下步骤操作:

在cmd中进入mysql bin目录,即cd C:\ProgramData\MySQL\MySQL Server 5.6\bin(这是一个隐藏的目录)

跳过授权表将允许您进入mysql

  • mysqld.exe --skip-grant-tables

打开新的命令提示符或在同一命令提示符上

  • mysql.exe -uroot -p(没有任何密码,您可以登录到mysql)

运行以下查询以更改mysql root密码

  • UPDATE mysql.user set password=password('root password') WHERE user='root';
  • flush privileges

就这样,重新启动mysql并使用新密码开始使用..!!


1
如果您在尝试重置根密码时收到此错误:mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.,您可以尝试以下操作:
sudo service mysql stop
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables & 
mysql -uroot
update mysql.user set authentication_string=password('your_password') where user='root';
flush privileges;
quit
sudo killall mysql
sudo service mysql start
mysql -u root -pyour_password

在Ubuntu 18.04上运行的MySQL 5.7中进行测试。

0
在 Windows 上使用 MySQL 5.6 我需要运行以下语句才能让它正常工作。
UPDATE mysql.user
SET Password=PASSWORD('NEW PASSWORD'), 
authentication_String=PASSWORD('NEW PASSWORD')
WHERE User='root';

你在哪里运行这个语句?在命令提示符中吗? - wolfblitza

0

不需要编辑mi.ini文件:

service mysql stop
mysqld_safe --skip-grant-tables

在另一个独立的ssh会话中:

update mysql.user set password=PASSWORD('NEW PASSWORD') where user='root';

无需刷新权限,只需重新启动服务器


0

如果您已经安装了Xampp。

  1. 进入C:\xampp\mysql\bin
  2. 打开my.ini文件
  3. [mysqld]下添加skip-grant-tables
  4. 进入Windows服务并停止MySQL服务
  5. 从命令提示符中触发此命令C:\xampp\mysql\bin\mysql
  6. 现在,使用MySQL查询重置root密码update mysql.user set password=PASSWORD('root') where user='root';
  7. 退出命令提示符。
  8. 重新启动在步骤4中关闭的mysql Windows服务。
  9. 现在,您将能够使用root作为密码登录到MySQL。

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