空大

解决 MySQL 认证插件 caching_sha2_password 与 PHP 版本不兼容的问题

mysql 8.0 及以后的版本中,默认的认证插件已更改为 caching_sha2_password。然而,当你使用较旧的 php 版本(如 PHP 7.1)时,可能会遇到认证问题,提示错误:

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

这个问题通常是因为 PHP 7.x 不支持 caching_sha2_password 插件,而默认情况下,MySQL 8.0 使用的是该插件。为了解决这个问题,需要对 user 用户进行适当的配置调整。

为何会发生这种问题?

  • MySQL 8.0 默认使用 caching_sha2_password 插件:MySQL 8.0 为了增强安全性,引入了 caching_sha2_password 插件作为默认的认证插件。
  • PHP 7.x 不支持 caching_sha2_password:在 PHP 7.x 中,mysqlnd(MySQL Native Driver)并未提供对 caching_sha2_password 的支持。因此,当 PHP 7.x 尝试连接使用该插件的 MySQL 8.0 时,会出现认证失败的错误。

解决方案

1. 修改 MySQL 用户认证方式(适用于 PHP 7.x)

如果你仍在使用 PHP 7.x,并且遇到 SQLSTATE[HY000] [2054] 错误,你可以通过修改 MySQL 用户的认证插件为 mysql_native_password 来解决问题。mysql_native_password 插件在 PHP 7.x 中得到广泛支持。

使用以下 SQL 命令修改用户的认证插件:

ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; 

如果用户是从远程(如 127.0.0.1)连接,也需要修改该主机上的认证插件:

ALTER USER 'user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; 

记得将 '你的密码' 替换为用户的实际密码。这样,你就能确保 PHP 7.x 客户端能够正常连接 MySQL 8.0。

2. 使用 PHP 8.x 或更高版本

如果你决定升级 PHP 到 8.x 或更高版本,那么 PHP 8.x 会原生支持 caching_sha2_password 插件。这样,你可以继续使用 MySQL 8.0 的默认认证插件,无需修改 MySQL 用户的认证方式。

升级到 PHP 8.x 后,你可以使用如下 SQL 来确保用户使用 caching_sha2_password 插件:

ALTER USER 'user'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的密码'; FLUSH PRIVILEGES; 

升级 PHP 的方式可以通过包管理器或手动下载最新的 PHP 版本。

3. 修改 MySQL 配置文件(适用于全局解决方案)

如果你需要对所有 MySQL 用户的认证插件进行修改,可以在 MySQL 配置文件(my.cnf)中设置默认的认证插件。这样做可以确保所有新创建的用户都使用 mysql_native_password,避免将来遇到兼容性问题。

在 MySQL 配置文件(通常在 /etc/my.cnf/etc/mysql/my.cnf)中,添加以下行:

default_authentication_plugin=mysql_native_password

然后重启 MySQL 服务:

systemctl restart mysqld

这样,在该配置生效后,所有新创建的用户都会默认使用 mysql_native_password 插件。

总结

  • PHP 7.x:由于不支持 caching_sha2_password 插件,建议将 MySQL 用户的认证插件改回 mysql_native_password
  • PHP 8.x 或更高版本:可以直接使用 MySQL 8.0 的默认认证插件 caching_sha2_password,无需修改 MySQL 配置。
  • 全局解决方案:如果你不打算升级 PHP,可以通过修改 MySQL 配置文件,确保所有用户使用 mysql_native_password

通过这些方法,你可以确保 MySQL 和 PHP 之间的兼容性,避免出现 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 的错误,并保证你的应用程序能够顺利运行。

赞(0)
未经允许不得转载:剧搜博客 » 解决 MySQL 认证插件 caching_sha2_password 与 PHP 版本不兼容的问题

评论 抢沙发

5 + 5 =