如何使用MySQL v5.7更改MySQL“ root”密码?


14

当前环境:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

密码更改命令用户:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

我想念什么吗?


尝试以mysql安全模式启动。那么您可以更改root密码
Mongrel,2016年

对于阅读此主题的任何人。MySQL 5.7进行了重大更改。升级之前,请先阅读有关它们的信息。
Rui F Ribeiro

Answers:


24

在MySQL 5.7中,password在外地mysql.user表中的字段被删除,现在的字段名称authentication_string

首先选择数据库:

mysql> use mysql;

然后显示表格:

mysql> show tables;

您将找到该user表,并查看其字段:

mysql> describe user;

您将意识到没有名称字段password,密码字段名为authentication_string。因此,只需执行以下操作:

update user set authentication_string=password('XXXX') where user='root';

按照@Rui F Ribeiro的建议,也可以运行:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

1
+1作为authentication_string参考。升级到5.7后,我最近也发现了它
Rui F Ribeiro

4
虽然并非完全针对此答案,但5.7的另一种选择是SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro谢谢,更新了我的答案
Rahul

1
Rahul最初,我将线程编辑为高于5.7,然后将其更改为使用MySQL 5.7,以使问题的精神更加明显。例如@Shivu不知道这是5.7中的更改。
Rui F Ribeiro

1
这是解决问题的一种方式。我们不只是为了OP的利益而编辑问题和答案,而且以后也不会为了其他人而编辑。
Rui F Ribeiro

2

MySQL更改密码的方式是 SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

参见MySQL 5.7参考手册/ ... / SET PASSWORD语法

SET PASSWORD语句为MySQL用户帐户分配一个密码,该密码指定为明文(未加密)或加密值:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Rahul接受的答案显示了如何使用DML语句更新密码。

update user set authentication_string=password('XXXX') where user='root';

警告:这不是官方和受支持的方式。如果您不知道自己在做什么,可能会引起麻烦。别忘了FLUSH PRIVILEGES

对于大多数操作,例如创建用户,更改用户权限或更改密码,您将需要使用高级语句。它们不仅易于使用,并且与大量MySQL版本兼容,而且还可以防止您出错(当然,请记住设置“ NO_AUTO_CREATE_USER” sql模式)。它们甚至通常在与Galera群集类似的MyISAM敌对环境中也能很好地工作。

停止使用冲洗特权

请使用GRANTREVOKESET PASSWORD,或RENAME USER不直接DML语句。

更新:SET PASSWORD ... = PASSWORD('auth_string')语法从MySQL 5.7.6开始不推荐使用,并将在以后的MySQL版本中删除。


1

mysqladmin -u user-name password -p "oldpassword" "newpass"

如果您可以登录,然后尝试此将""无法工作尝试''单引号

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';


虽然我确实喜欢mysqladmin的答案,但请参见Rahul的答案。您的SQL查询已过时。我更正了mysqladmin,您缺少密码指令。
Rui F Ribeiro

1
谢谢里贝罗。我错过了authentication_string
Mongrel,2016年

0

就我而言

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

因此,我认为您的更新命令是正确的,但是您需要重新启动mysql服务器。


-1

对于此问题,我使用了一种简单且粗鲁的方法,将字段名称重命名为password,原因是我在视觉操作错误中使用了mac navicat premium软件:“ field List”中的“未知”列“ password”,软件本身使用密码,因此我无法轻松操作。因此,我进入数据库命令行,运行

Use mysql;

然后修改字段名称:

ALTER TABLE user CHANGE authentication_string password text;

毕竟一切正常。

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.