MySQL密码修改失败主因是语法错误、权限未刷新、用户不匹配及认证插件变化。1. 新版本弃用PASSWORD()函数,应使用ALTER USER 'user'@'host' IDENTIFIED BY 'new_password'; 2. 修改后须执行FLUSH PRIVILEGES; 3. 确保'user'@'host'存在于mysql.user表中;4. caching_sha2_password插件可能导致登录失败,可改为mysql_native_password。忘记密码时可通过--skip-grant-tables模式重置。关键在于匹配版本语法并处理插件兼容性。

MySQL密码修改失败通常由语法错误、权限不足、版本变更带来的认证机制变化等原因引起。直接使用旧方式修改密码在新版本中容易出错。下面分析常见原因并提供对应解决方法。
1. 密码修改失败的常见原因
原因一:语法不正确
在MySQL 5.7及以上版本,user表结构发生变化,仍使用SET PASSWORD FOR 'user'@'host' = PASSWORD('new_password');会报错,因为PASSWORD()函数已被弃用。
原因二:未刷新权限
修改密码后未执行FLUSH PRIVILEGES;,导致更改未生效。
原因三:用户不存在或主机名不匹配
指定的'user'@'host'在mysql.user表中不存在,例如本地用户应为'root'@'localhost'而非'root'@'%'。
原因四:插件认证方式限制
新版本MySQL默认使用caching_sha2_password插件,某些客户端不支持,导致即使密码正确也无法登录。
2. 正确修改MySQL密码的方法
根据MySQL版本选择合适的语法:
-
MySQL 5.7及以上推荐方式:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
修改完成后执行:FLUSH PRIVILEGES; -
兼容旧版本写法(不推荐):
在老版本中可使用:SET PASSWORD FOR 'root'@'localhost' = 'NewPass123!';
注意:新版本中不再需要PASSWORD()函数。 -
直接更新user表(应急用):
UPDATE mysql.user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'root' AND Host = 'localhost';
然后必须执行:FLUSH PRIVILEGES;
3. 忘记root密码时的重置步骤
如果原密码未知,可通过跳过权限验证重置:
- 停止MySQL服务:sudo systemctl stop mysql
- 以安全模式启动:mysqld_safe --skip-grant-tables &
- 登录MySQL:mysql -u root
- 执行上面的ALTER USER或UPDATE语句修改密码
- 重启MySQL服务使配置恢复
4. 检查认证插件与客户端兼容性
查看当前用户的认证方式:
若plugin为caching_sha2_password但客户端不支持,可改为:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';这样可避免因认证插件导致的登录失败问题。
基本上就这些。关键是根据MySQL版本使用正确的语法,并注意权限刷新和插件兼容性问题。










