升级到 MySQL 8.4 后网站/应用数据库连接失败(认证插件不兼容)
生产库从 8.0 升级到 8.4 LTS 后,PHP 网站、Navicat 等旧客户端报数据库连接错误,网站直接宕机;日志常见 “Authentication plugin 'caching_sha2_password' cannot be loaded” 或 “Plugin 'mysql_native_password' is not loaded”(ERROR 1524)。
查看原因与解决方案
MySQL 8.4 默认禁用 mysql_native_password 插件,改用 caching_sha2_password;库内老账号若仍使用旧插件,升级后直接失效。PHP 7.4 的 mysqlnd 不支持 caching_sha2_password,连接必然失败。另外密码含 ! 等字符在 Bash 执行 SQL 时会被历史展开报 “event not found”。
1) 升级前必做:逐账号检查 SELECT user,host,plugin FROM mysql.user; 对需兼容老客户端的账号提前切换:ALTER USER 'dbuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码';(密码含 ! 时用 set +H 关闭历史展开,或改用 heredoc 执行 SQL)。
2) PHP 7.4 等老应用:账号需显式 IDENTIFIED WITH mysql_native_password BY '密码';(MySQL 8.4 默认禁用该插件,可在配置 mysql_native_password=ON 后重启启用,建议尽快升级客户端而非长期依赖)。
3) 升级后验证:用真实客户端连接测试,确认所有调用方(网站、脚本、BI)均可用,再对外放开流量。