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_priv 或 Super_priv)。
解决方法:
通过以下 SQL 语句为用户授予必要的权限:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
最后一步:
完成上述操作后,重启 MySQL 服务以确保所有更改生效:
sudo systemctl restart mysql
总结
- MySQL 中用户密码可能分为
@localhost和@%两种,修改密码时需确保两者都更新。 - 使用
UPDATE语句直接修改mysql.user表中的密码字段,并刷新权限。 - 如果遇到权限问题,检查并授予用户
Grant_priv和Super_priv权限。 - 修改完成后,重启 MySQL 服务以确保更改生效。
















