MySQL root密码更改


95

我一直试图重置我的MySQL根密码。我已经运行了mysqld_safe --skip-grant-tables,更新了根密码,并检查了用户表以确保它在那里。重新启动mysql守护程序后,我尝试使用刚刚设置的新root密码登录,但仍然由于用户“ root”错误而拒绝访问。我也尝试完全删除并重新安装mysql(包括删除my.cnf文件),但还是没有运气。有人对我下一步的工作有什么建议吗?

提前致谢


2
请发布您的实际错误
Vishwanath Dalvi

16
如果您没有被锁定SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); 是最安全的。
sabgenton

我按照视频中的步骤操作,更改了我的一台服务器youtu.be/gFo5DV_pSg8
Prem


1
服务器版本:8.0.20-0ubuntu0.20.04.1(Ubuntu)错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的'PASSWORD(“ 1”)'附近使用正确的语法SET PASSWORD FOR'root'@'localhost'= PASSWORD(“ somepassword”);
discipleartem

Answers:


123

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


7
这在5.7中对我有效,而不能接受。
Stoopkid

2
如果您的MySQL root密码设置为空,这是正确的解决方案。
fschuindt '18

3
>更新mysql.user SET authentication_string = PASSWORD('MyNewPass')WHERE user ='root'; >冲洗特权;在MySQL 5.7.x版本中,mysql表中没有更多的密码字段。它已替换为authentication_string。
罗伯特·安东尼·特里比亚娜

2
这对我来说还可以,但实际上什么也没做
Freedo

1
它需要一个额外的命令FLUSH PRIVILEGES来使更改生效,而无需重新启动数据库服务器。
NetVicious

60

从MySQL参考手册中了解一下:

第一次登录mysql:

# mysql -u root -p

然后在mysql提示符下运行:

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

然后

FLUSH PRIVILEGES;

查看此页面以获取更多信息:重置根密码:Unix Systems


更新用户密码时,出现错误消息“您正在使用安全更新模式,并且您尝试更新不具有使用KEY列的WHERE的表...”。有关如何解决此错误,请参见stackoverflow.com/questions/11448068/…
乔·鲍里斯科

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'(''NewNewPass')WHERE User ='root'附近使用
discipleartem


27

这是WAMP v3.0.6及更高版本的更新答案

> UPDATE mysql.user 
> SET authentication_string=PASSWORD('MyNewPass') 
> WHERE user='root';

> FLUSH PRIVILEGES;

在MySQL 5.7.x版本中,mysql表中没有更多的密码字段。它已替换为authentication_string。(这用于终端/ CLI)

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

FLUSH PRIVILEGES;

(如果是PHPMyAdmin或任何Mysql GUI,则为此)


这个答案是少数几个mysql.user应该更新表的人之一。请注意,如果您正在使用任何其他数据库(由use命令设置),则会收到错误消息,指出该表user不存在。谢谢你,先生!
Aleksandar

1
为我工作。我正在使用5.7.x,没有mysql.user表。其他答案已经过时
沉思玮申思维


我回滚是因为我打算使用>,因为每行的分号是用于终端的
Robert Anthony S. Tribiana

受影响的0行,匹配的行:3已更改:0 ...?
Trainoasis

22

找到了!更改密码时,我忘记对密码进行哈希处理。我使用此查询来解决我的问题:

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

我忘记了PASSWORD('NEW PASSWORD'),只是以纯文本形式输入了新密码


确保您回来并接受您的答案以允许其他人看到解决方案
ghostJago


3
任何想法为什么当我使用相同的命令时,会返回以下错误?错误1054(42S22):“字段列表”中的未知列“密码”
Adrian M.

1
您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'('NEW PASSWORD')其中user ='root'附近使用
discipleartem

20

请按照以下步骤操作。

第1步。停止mysql

第2步。 sudo mysqld_safe --skip-grant-tables

第三步。mysql -u root

第4步。use mysql;

步骤5。show tables;

步骤6。describe user;

步骤7。update user set authentication_string=password('1111') where user='root';

用密码1111登录


3
flush privileges作为最后一步很重要。
Khom Nazid

确实是用ass完成的。我完成了所有教程来重设密码。一切正常,但当我使用新密码登录时不起作用。
Shidomaru NeveRage

如果mysqld没有启动,并且类似mysqld守护程序的消息带有来自/ var / lib / mysql的数据库mysqld_safe来自pid文件/var/run/mysqld/mysqld.pid的mysqld,请执行以下操作:mkdir / var / run / mysqld chomod 777 / var /运行/ mysqld的,并从乞讨开始所有
jokermt235

18

我也在附近搜寻,可能有些答案适合某些情况,

我的情况是Ubuntu 18.04.2 LTS系统上的Mysql 5.7:

(获得root特权)

$ sudo bash

(为root数据库用户设置密码+分步实施安全性)

# mysql_secure_installation

(通过密码(而不是套接字)访问root用户)

(+编辑:显然您需要再次设置密码吗?)

(不要将其设置为“ mySecretPassword” !!!)

# mysql -u root

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword'); 
mysql> FLUSH PRIVILEGES;
mysql> exit;

# service mysql restart

非常感谢zetacu(和erich)提供了出色的答案(搜索了几个小时...)

享受:-D

S.


到目前为止,这是最好的答案,至少对于mysql服务器5.7。
佐尔坦豪伊杜

最佳答案。谢谢。
Luciano Fantuzzi

11

在MySQL 8.0.4+上

要更新当前的root用户:

select current_user();
set password = 'new_password';

要更新其他用户:

set password for 'otherUser'@'localhost' = 'new_password';

要在更新密码之前设置密码策略:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

其他/更好的更新根密码的方法:

mysql_secure_installation

是否希望坚持使用5.x身份验证,以便仍然可以使用旧版应用程序?

my.cnf

default_authentication_plugin = mysql_native_password

更新根目录:

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';

7

这对我有用-

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/zh-CN/reset-permissions-windows.html


错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行“ IDENTIFIED BY'MyNewPass”附近使用
trainoasis

刚通过CLI通过CLI复制了确切的内容:o
trainoasis,

当然,撒到我的服务器上+ mysql -u root -p进入mysql cli
trainoasis

6

您必须重设密码!Mac osx(已测试并工作)和ubuntu的步骤

停止MySQL

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

以安全模式启动它:

$ sudo mysqld_safe --skip-grant-tables

(以上是整个命令)

在此过程完成之前,这将是一个持续执行的命令,因此请打开另一个外壳程序/终端窗口,无需密码即可登录:

$ mysql -u root

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

启动MySQL

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

您的新密码是“密码”。


我收到一条消息:未选择数据库
Mimouni


5

对于MySQL 5.7.6和更高版本:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

对于MySQL 5.7.5和更早版本:

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

3

对于当前最新的mysql版本(8.0.16),这些答案都不适合我。

在查看了几个不同的答案并将它们组合在一起之后,这就是我最终使用的有效方法:

update user set authentication_string='test' where user='root';

希望这可以帮助。


2

我不时遇到的一个常见错误是我忘记了该-p选项,因此您确定您使用过:

mysql -u root -p


2

使用mysqladmin命令行实用程序更改MySQL密码:

mysqladmin --user=root --password=oldpassword password "newpassword"

资源


1

尝试了@kta的答案,但对我没有用。

我正在使用MySQL 8.0

这为我工作:

mysql> SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'


1
请在您的代码中添加一些解释-这将如何解决一个已有七年历史的问题?
Nico Haase

看起来语法已经在七年中改变了。这不是包装带密码)密码(dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu

密码哈希应为41位十六进制数字
-Mimouni

1

如此多的评论,但这种方法对我有所帮助:

sudo mysqladmin -u root password 'my password'

在我安装后的情况下,我获得了MySQL服务,但没有root用户密码,因此我需要为我的安全设置密码。


它可用于重置mysql root用户密码,而无需知道旧密码。但是请确保没有人可以访问您的系统日志,因为已记录此密码:Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
Gryu

0

停止所有清洗服务,退出清洗。

打开记事本,然后输入> SET PASSWORD FOR'root'@'localhost'= PASSWORD('');

然后将其保存到c:驱动器,并使用任何名称..像这样的“ c:/example.txt”

现在转到您的“ wamp” falder wamp> bin> mysql> mysql(您的版本)> bin在我的情况下的路径是“ C:\ wamp \ bin \ mysql \ mysql5.6.17 \ bin”

现在复制您的路径,然后使用(ctrl + r)运行cmd,然后键入“ cmd”(输入)

键入cd,然后右键单击cmd并粘贴路径(输入),然后键入(mysqld --init-file = C:\ example.txt)不带花括号,然后输入(输入)

然后重新启动PC或打开taskmgr并杀死mysqld.exe

启动wamp,您的密码将被删除...


0

对于MacOS用户,如果您忘记了root密码,@ thusharaK的答案(https://stackoverflow.com/a/28601069/5628856)很好,但是还有一些技巧:

如果您使用系统偏好设置来启动mysql服务器端,只需

sudo mysqld_safe --skip-grant-tables

可能对您不起作用。

您必须确保命令行参数与系统启动配置相同。

以下命令对我有用:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

您可以使用

ps aux | grep mysql

检查自己的。


-1

在Ubuntu上,

sudo dpkg-reconfigure mysql-server-5.5 

替换5.5为当前版本,系统将要求您输入新的root密码。


在什么操作系统上?这是没有道理的。
Khom Nazid '19

-1
  1. 在Mac上,打开系统偏好设置> MySQL。
  2. 在MySQL的配置部分中检查初始化数据库。
  3. 在提示下更改密码。 初始化数据库
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.