几个前提:
- mysql 8 以上版本
- 需求是修改 mysql 数据库密码
- 知道旧密码
举个例子:我现在是 mysql 8.0.30 版本,安装数据库时设置的密码是 root,现在修改为 123456
解决办法
前提:需登上数据库:

方法步骤
1、使用 ALTER USER 语句修改密码:在 MySQL 8 及更高版本中,推荐使用 ALTER USER 语句来修改用户密码。语法如下:
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
'username':是你要修改密码的用户名。'host':是该用户所在的主机(通常是 localhost 或 %,表示所有主机)。'new_password':是新的密码。
例如,如果你要修改 root 用户的密码为 123456,可以执行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
执行该命令后,MySQL 会立即更新密码。
提示:没报错的话,第2步不需要看,报错了接着看:
2、报错: 执行上面的命令后报错:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
mysql>

2.1 问题分析: 通常是因为数据库用户权限问题,或者 MySQL 没有找到 root 用户的记录(大多数是这个情况)
2.2 问题排查:
2.2.1 首先确保 root 用户存在并且正确。假如存在且正确,则:
可能 root 用户并没有完全正确地创建,或者 root 用户的 host 字段没有匹配到你当前的连接主机(比如 % 或者其他)。先通过以下命令检查 root 用户的存在情况:
SELECT user, host FROM mysql.user WHERE user = 'root';
通过上面命令:确认 root 用户确实存在并且 host 是 localhost。
2.2.2 输入上述命令:
mysql> SELECT user, host FROM mysql.user WHERE user = 'root';
+------+------+
| user | host |
+------+------+
| root | % |
+------+------+
1 row in set (0.00 sec)
mysql>
命令结果分析: 从提供的查询结果来看,root 用户的 host 是 %,这意味着 root 用户可以从任意主机连接到 MySQL。
再次分析报错原因: 由于 root 用户的 host 是 % 而不是 localhost,这就是为什么你使用 ALTER USER 'root'@'localhost' 时会遇到问题,因为 localhost 并没有找到对应的 root 用户。
2.3 解决问题:
如果你希望 root 用户可以从任意主机(%)登录,并修改该用户的密码,可以执行以下语句:
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
这会将 root 用户在任意主机上的密码更新为 123456。
3、最后,确保刷新权限:
>mysql FLUSH PRIVILEGES;
4、使用新密码测试登录成功。
1166

被折叠的 条评论
为什么被折叠?



