问题:
接手迁移某环境PHP代码及数据,源库及目标库版本Mysql8,应用框架为thinkphp5
迁移后访问登录报“500 Internal Server Error”
打开thinkphp调试模式:
vim config/app.php
...
return [
// 应用调试模式
"
app_debug
" =>
true
,
// 应用Trace
"app_trace" => false,
...
刷新页面点击登录F12观察到如下错误
sqlSTATE[HY000] [2054] The server requested authentication method unknown to the client
查询发现这个错误是因为mysql 8默认使用了新的密码验证插件:caching_sha2_passWord,而之前的PHP版本中所带的mysqlnd无法支持这种验证。
这里出现这个问题是两个环境在安装时所选用的密码验证方式不同造成的
。
解决办法:
一、升级PHP支持MySQL 8的新验证插件
。
PHP 7.2.8和PHP 7.1.20已经可以支持caching_sha2_password,可直接连接MySQL 8。
建议使用PHP 7.4.3及以上版本
https://bugs.php.net/bug.php?id=79011
Https://bugs.php.net/bug.php?id=79275
截止PHP 7.0.31和PHP 5.6.37还无法支持caching_sha2_password,不知道后续版本是否会做出支持。
可以通过phpinfo()函数了解当前安装的PHP是否支持caching_sha2_password。
二、
如不能升级PHP,可在MySQL 8中创建(或修改)使用caching_sha2_password插件的用户,现有的代码及配置无需变动。
1、在
CREATE USER
时,使用IDENTIFIED WITH xxx_plugin BY ‘password‘指定验证插件:
CREATE USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘password@!2#4‘;
2、使用
ALTER USER
修改已有用户的验证插件:
ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password;
或
ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘new_password‘;
采用前一种方式,用户的密码将被清除;后一种方式将为用户设置新的密码。
3、/etc/my.cnf配置文件中,有一行:
#
default-authentication-plugin
=
mysql_native_password
删除开头“#”,重启mysql服务,此后创建的用户均默认使用mysql_native_password。
4、MySQL安装完成,未启动情况下修改/etc/my.cnf上述配置,启动后创建的用户默认使用mysql_native_password插件。
--结束END--
本文标题: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
本文链接: https://www.lsjlt.com/news/8215.html(转载时请注明来源链接)
有问题或投稿请发送至:
邮箱/279061341@qq.com QQ/279061341
0