使用命令行更改mysql用户密码

93

我正在尝试使用命令行更新数据库用户的密码,但是没成功。这是我使用的代码:

mysql> UPDATE user SET password=PASSWORD($w0rdf1sh) WHERE user='tate256';

有人能告诉我这段代码哪里出了问题吗?


你在遵循什么步骤?仅仅把它放进去是行不通的。如果我没记错,这需要一个过程和代码。 - Idris
啊,你还记得怎么做吗? - user3310572
这篇文章更加详细,应该更容易理解 http://innovativethought.net/2007/05/17/resetting-your-forgotten-mysql-password/ - Idris
10个回答

122

在您的代码中,请尝试将密码放在单引号中。或者,根据mysql的文档,以下内容应该可以工作 -

SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('cleartext password');

FLUSH PRIVILEGES;

最后一行非常重要,否则你的密码更改将不会生效,遗憾的是。

编辑:

我在本地进行了测试,它起作用了 -

mysql>  set password for 'test' = PASSWORD('$w0rdf1sh');
Query OK, 0 rows affected (0.00 sec)

我的版本是5。您可以使用以下命令确定您的版本 -

SHOW VARIABLES LIKE "%version%";

4
当我这样做时,它会返回语法错误,提示未预期的标记符号(')。 - user3310572
1
你使用的是哪个版本的mysql?我从5.0版本的文档中找到了上述语法。你试过我发布的命令吗? - hellboy
我相信我正在使用4.0版本,是的,我已经尝试过了。 - user3310572
在MySQL Ver 14.14中,该命令对我很有效,请确保密码用引号括起来,并且密码中的任何引号都被转义。 - Snaver
如果您尚未登录MySQL但尝试在shell中使用语句,则会出现error near unexpected token ('。请始终使用以下命令先登录MySQL(例如root):mysql -u root -p - Florian Bauer
1
奇怪的是,即使刷新了,对我来说仍然不起作用 :-( 我正在使用Mysql 5.7.18-0ubuntu0.16.04.1 - coding_idiot

43

从MySQL 5.7.6版本开始,请使用ALTER USER命令。

示例:

ALTER USER 'username' IDENTIFIED BY 'password';

原因是:

  • SET PASSWORD ... = PASSWORD('auth_string') 语法自MySQL 5.7.6起被弃用,并将在未来的MySQL版本中被移除。

  • SET PASSWORD ... = 'auth_string' 语法尚未被弃用,但现在推荐使用ALTER USER语句分配密码。


1
即便是通过 PHP 与 MySQL 进行交互,这也是真的吗? - oldboy
@Anthony 只有当你的MySQL版本 >= 5.7.6时才成立。 - Govind Rai
1
ALTER USER ... IDENTIFIED BY ... 是一个 SQL 语句,用于配置数据库用户权限。UPDATEINSERT 具有不同的功能,正如它们的名称所示,可以更新记录并将记录插入到数据库表中。 - Govind Rai
哦,ALTER... 是用于配置用户权限的。这很有道理。 - oldboy
2
在MariaDB中出现错误 ERROR 1064 (42000):您的SQL语法有误,请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方式,接近于'USER 'root' IDENTIFIED BY - Pavel Niedoba
显示剩余5条评论

14

注意:您应该以root用户身份登录

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your password');

7

这是针对WAMP v3.0.6的更新答案。

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

FLUSH PRIVILEGES;

3

在MySQL 5.7.6之前,这个命令可以从命令行运行:

mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$w0rdf1sh');"

我没有安装mysql以供测试,但我认为在您的情况下,应该是这样的

mysql -e "UPDATE mysql.user SET Password=PASSWORD('$w0rdf1sh') WHERE User='tate256';"

2
在Windows 10中,退出当前登录并在命令行上运行以下内容: --> mysqladmin -u root password “newpassword” 其中root可以替换为任何用户。

2
截至MySQL 8.0.18 这对我来说很好用。

mysql> SET PASSWORD FOR 'user'@'localhost' = 'userpassword';


2

这对我有用。从MYSQL网页获得解决方案。

在MySQL中运行以下查询:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'New_Password';

0
你可以使用下面的查询,这对我起作用了。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.01 sec)

重启SQL服务器之后,才能生效。
sudo service mysql stop
sudo service mysql start 

之前我遇到了同样的错误,
mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

但是,现在我可以使用命令 mysql -u root -p 和密码 password 登录了。

-1
您的登录根目录应该是/usr/local/directadmin/conf/mysql.conf。然后尝试以下操作。
UPDATE mysql.user SET password=PASSWORD('$w0rdf1sh') WHERE user='tate256' AND Host='10.10.2.30';
FLUSH PRIVILEGES;

Host是你的MySQL主机。


1
不起作用。返回语法错误,附近有意外的标记(')。 - user3310572

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