MySQL 8.0执行ALTER USER报ERROR 1819,因默认启用validate_password插件,要求密码至少8位且含大小写字母、数字和特殊字符;合规示例为MyPass@2026,或临时设SET GLOBAL validate_password.policy=LOW(仅限测试环境)。

ALTER USER执行失败:ERROR 1819密码策略不满足
MySQL 8.0默认启用了validate_password插件,新密码必须同时包含大小写字母、数字和特殊字符。直接执行ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'会报ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
解决方法不是关插件,而是用合规密码:
- 至少8位,例如
MyPass@2026(含大写M、小写yPass、数字2026、特殊符@) - 避免常见弱口令如
password、root123、12345678 - 若需临时降低策略(仅测试环境),可执行:
SET GLOBAL validate_password.policy = LOW;,但不建议在生产环境使用
ALTER USER报ERROR 1396:用户不存在或host不匹配
执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx'时提示ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost',说明该用户记录在mysql.user表中实际是'root'@'%'或'root'@'127.0.0.1',而非localhost。
先查清真实账号:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
再按实际结果执行,例如:
- 如果返回
root | %→ 改用ALTER USER 'root'@'%' IDENTIFIED BY 'MyPass@2026'; - 如果返回
root | 127.0.0.1→ 改用ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'MyPass@2026'; - 如需统一所有root入口,可分多条执行,或后续再用
CREATE USER+GRANT补全
连接后直接执行ALTER USER仍被拒绝:plugin是auth_socket或caching_sha2_password
部分Linux发行版(如Ubuntu)安装MySQL 8.0时,root用户默认使用auth_socket插件,此时即使密码正确也无法用密码登录;而Windows或标准安装则多为caching_sha2_password,但客户端(如Navicat、旧版MySQL Workbench)可能不兼容。
统一修复方式(登录后执行):
- 对
auth_socket用户(常见于localhost):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass@2026'; - 对
caching_sha2_password但客户端报错ERROR 2059:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPass@2026'; - 执行完必须跟
FLUSH PRIVILEGES;,否则变更不生效
修改后无法远程连接:host限制与bind-address未放开
ALTER USER只改密码和认证方式,不改网络访问权限。即使你设了'root'@'%',MySQL仍可能监听127.0.0.1,导致远程连接被拒。
两步缺一不可:
- 确认用户host是
%(见上一个副标题的SELECT查询) - 编辑配置文件(如
/etc/mysql/mysql.conf.d/mysqld.cnf或C:\ProgramData\MySQL\MySQL Server 8.0\my.ini),注释掉:bind-address = 127.0.0.1和mysqlx-bind-address = 127.0.0.1 - 重启MySQL服务:
sudo systemctl restart mysql(Linux)或net stop MySQL80 && net start MySQL80(Windows)
真正容易被忽略的是:改完bind-address后没重启服务,或者防火墙(如ufw、Windows Defender Firewall)仍拦截3306端口。这两处不检查,ALTER USER再成功也连不上。


















