问题:
接手迁移某环境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及以上版本
截止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插件。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6396.html