必须先确认plugin_dir路径真实存在、插件文件存在且mysql用户有r-x权限,否则install plugin或alter user会报error 1524;执行show variables like 'plugin_dir'查路径,用sudo -u mysql ls验证可读性,selinux需设为mysqld_plugin_t上下文。

先确认插件目录是否存在且可读,否则所有后续操作都是徒劳。
plugin_dir 路径查不到或为空
MySQL 启动时必须能访问 plugin_dir 下的 .so(Linux/macOS)或 .dll(Windows)文件,如果路径错误、权限不足或目录为空,就会直接报 ERROR 1524 或 Plugin 'xxx' is not loaded。
- 登录 MySQL 后执行:
SHOW VARIABLES LIKE 'plugin_dir';—— 注意看返回值是否为真实存在的绝对路径(如/usr/lib/mysql/plugin/),而不是空值或明显异常路径(如/tmp/xxx) - 用系统命令验证该路径是否存在且有可读权限:
ls -l /usr/lib/mysql/plugin/(把上面查到的路径替换进去);若提示No such file or directory,说明目录根本没创建或被误删 - 常见陷阱:某些 Docker 镜像(如官方
mysql:8.0)默认plugin_dir指向/usr/lib/mysql/plugin,但实际插件文件可能在/usr/lib/mysql/plugin/caching_sha2_password.so等位置——需确认该路径下确实存在对应插件文件,而不仅是目录存在
plugin_dir 路径存在但插件文件缺失
目录存在 ≠ 插件可用。MySQL 8.0+ 默认启用 caching_sha2_password,但部分精简版安装包(如 Ubuntu 的 mysql-client-core-8.0 单独安装)可能不带 mysql_native_password.so,导致你执行 ALTER USER ... IDENTIFIED WITH mysql_native_password 时失败。
- 检查插件文件是否真在目录里:
ls /usr/lib/mysql/plugin/mysql_native_password.so和ls /usr/lib/mysql/plugin/caching_sha2_password.so;任一缺失都会触发对应插件加载失败 - 若缺失
mysql_native_password.so,不要手动从别处拷贝——不同 MySQL 版本的插件二进制不兼容;应重装完整服务端包,例如 Ubuntu 上运行:sudo apt install mysql-server(而非只装 client) - 若缺失
caching_sha2_password.so(常见于旧版 MySQL 5.7 被误标为 8.0 的 Homebrew 安装),说明版本和插件不匹配,此时强行指定该插件必报错,应改用mysql_native_password并确保它已安装
plugin_dir 权限或 SELinux 导致加载失败
即使路径对、文件在,MySQL 进程也可能因权限拒绝加载插件——尤其在 CentOS/RHEL 或启用了 SELinux 的系统上。
- 检查 MySQL 进程用户(通常是
mysql)能否读取插件目录:sudo -u mysql ls /usr/lib/mysql/plugin/;若报Permission denied,需修复目录权限:sudo chmod 755 /usr/lib/mysql/plugin,并确保父目录(如/usr/lib/mysql)也有执行权限 - SELinux 环境下,插件文件可能被标记为非标准类型,导致加载被拒;临时验证是否是 SELinux 问题:
sudo setenforce 0,再重启 MySQL 测试;若恢复正常,需用chcon修正上下文,例如:sudo chcon -t mysqld_plugin_t /usr/lib/mysql/plugin/*.so - Docker 场景中,挂载的
plugin_dir目录若来自宿主机,需确认宿主机该路径的 UID/GID 与容器内mysql用户一致,否则加载时静默失败
真正卡住人的往往不是“怎么改用户”,而是插件根本没被 MySQL 进程看见——plugin_dir 路径是否真实有效、文件是否真的存在、进程是否有权读取,这三个点漏掉任何一个,ALTER USER 就永远会报 1524。











