MySQL 5.7.35 密码修改问题处理记录

问题描述

在执行以下 SQL 命令修改 MySQL 用户密码时:

mysqladmin -u 用户名 -p 旧密码 password 新密码

发现本地连接时需要使用新密码,但远程连接仍可以使用旧密码登录。

原因分析

在 MySQL 中,对于一个用户,可能存在两个不同的密码:一个是用于 @localhost 的密码,另一个是用于 @% 的密码。上述命令仅修改了本地密码(即 @localhost 的密码),而未修改远程连接(即 @% 的密码)。

解决方案

要同时修改本地和远程连接的密码,可以通过以下 SQL 语句直接更新 mysql.user 表中的密码字段:

UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='用户名';
FLUSH PRIVILEGES;

注意

  • authentication_string 是 MySQL 5.7 版本中用于存储密码的字段,早期版本可能使用 password 字段。
  • 执行完 UPDATE 语句后,必须使用 FLUSH PRIVILEGES 命令刷新权限,使更改立即生效。

可能遇到的问题及解决方法

在执行上述操作后,可能会遇到以下问题:

问题
在创建表或执行其他数据库操作时,出现如下错误:

Access denied for user 'root'@'%' to database 'zc2'

原因
该错误通常是由于用户权限不足导致的。即使密码已正确更新,用户可能缺少必要的权限(如 Grant_privSuper_priv)。

解决方法
通过以下 SQL 语句为用户授予必要的权限:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

最后一步
完成上述操作后,重启 MySQL 服务以确保所有更改生效:

sudo systemctl restart mysql

总结

  1. MySQL 中用户密码可能分为 @localhost@% 两种,修改密码时需确保两者都更新。
  2. 使用 UPDATE 语句直接修改 mysql.user 表中的密码字段,并刷新权限。
  3. 如果遇到权限问题,检查并授予用户 Grant_privSuper_priv 权限。
  4. 修改完成后,重启 MySQL 服务以确保更改生效。