今天用 brew upgrade
把所有brew 按照的都升级了,mysql被升级到了 8,之后mac 自带的 apache + php 7 就无法连接mysql了。(mysql命令行客户端没有问题)
php 提示错误:
PDOException::(“PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]”)
原因
mysql 改变了默认的密码插件,改成了 caching_sha2_password 模式,而 php 不支持造成的。
phpinfo() 中可以查看到 loaded plugins 没有 caching_sha2_password
有两个解决方案:
- 给PHP增加 caching_sha2_password 模块
- 更改mysql 8,改回 mysql_native_password 模式
两个方法任选一个即可。
更改 mysql8 的授权方法
注意以下步骤要按顺序:
使用mysql命令行登录,更改 root 用户的授权方式(也可再创建一个超级用户); SQL语句在文末
修改 my.cnf (mac brew 安装的在 /usr/local/etc/my.cnf),增加一行
default_authentication_plugin=mysql_native_password
重启 mysql (brew services restart mysql)
如果在重启之前没有修改用户的密码插件,会提示密码错误,无法连接。
1 | /** 创建用户 admin **/ |
让 PHP 支持 caching_sha2_password
使用 PHP 7.1.16 之前的版本或者 PHP 7.2(PHP 7.2.4 之前的版本) 不支持 caching_sha2_password。
升级PHP到最新版就好了。