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

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

当前环境:

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'

我错过了什么吗?

答案1

在 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');

答案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模式)。它们甚至通常可以在不利于 MyISAM 的环境(例如 Galera 集群)中正常工作。

停止使用 FLUSH PRIVILEGES

请使用GRANTREVOKESET PASSWORD、 orRENAME USER而不是直接的 DML 语句。

更新: SET PASSWORD ... = PASSWORD('auth_string') 语法是自 MySQL 5.7.6 起已弃用并将在未来的 MySQL 版本中删除。

答案3

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

如果你可以登录然后尝试这""不会工作尝试''单引号

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

答案4

对于这个问题,我使用了一个简单粗暴的方法,将字段名重命名为password,出现这种情况的原因是我使用mac navicat premium软件在可视化操作中出现错误:Unknown column 'password' in 'field List',软件本身使用密码,让我无法轻易操作。因此,我进入数据库命令行,运行

Use mysql;

然后修改字段名称:

ALTER TABLE user CHANGE authentication_string password text;

毕竟正常。

相关内容