插件未加载时SHOW VARIABLES LIKE 'validate_password%'返回空,需先执行INSTALL PLUGIN validate_password SONAME 'validate_password.so'(Linux)或.dll(Windows)安装,再用SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS验证状态,最后SET GLOBAL配置参数。

确认 validate_password 插件是否已加载
直接执行 SHOW VARIABLES LIKE 'validate_password%';,如果返回空结果,说明插件根本没加载——此时设 validate_password.policy 会报错 Unknown system variable。别急着改变量,先查状态:SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';。若没结果或状态是 DISABLED,就得手动装。
INSTALL PLUGIN 是前提,不是可选项
Linux 下执行:INSTALL PLUGIN validate_password SONAME 'validate_password.so';;Windows 是 validate_password.dll。如果提示找不到文件,先查路径:SELECT @@plugin_dir;,确认该目录下真有对应文件。很多 Docker 环境里插件文件被精简掉了,得自己挂载或换镜像。
SET GLOBAL 必须带权限且顺序不能错
插件装完再设变量,否则部分变量不可写。用的账号必须有 SYSTEM_VARIABLES_ADMIN 权限(MySQL 8.0.16+ 推荐,SUPER 也能用但已被标记为 legacy)。常见错误包括:
-
validate_password.policy写成validate_password_policy(少个点) - 设
validate_password.length = 1—— 实际最小值是 4,设小了会被自动修正,不报错但无效 - 只设 policy 却没调低其他项,比如
mixed_case_count还是 1,那密码仍要含大小写字母
推荐一次性执行:SET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4; SET GLOBAL validate_password.mixed_case_count = 0; SET GLOBAL validate_password.number_count = 0; SET GLOBAL validate_password.special_char_count = 0;
my.cnf 里写 validate_password=off 不一定管用
某些 MySQL 8.0 发行版(尤其是官方 Docker 镜像)不认 validate_password=off 这种写法,它只接受点号语法的变量名。正确写法是在 [mysqld] 段里逐条写死:
[mysqld] validate_password.policy=LOW validate_password.length=4 validate_password.mixed_case_count=0 validate_password.number_count=0 validate_password.special_char_count=0
改完必须重启服务,SET GLOBAL 只对新连接生效,且重启即丢。最容易漏的是:容器启动时挂载的配置文件路径是否真被 mysqld 读到——docker logs 里搜 unknown variable 或 plugin not found 能快速定位。


















