GeXiangDong

精通Java、SQL、Spring的拼写,擅长Linux、Windows的开关机

0%

mysql 升级到8后 php 无法连接的解决

今天用 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 的授权方法

注意以下步骤要按顺序:

  1. 使用mysql命令行登录,更改 root 用户的授权方式(也可再创建一个超级用户); SQL语句在文末

  2. 修改 my.cnf (mac brew 安装的在 /usr/local/etc/my.cnf),增加一行 default_authentication_plugin=mysql_native_password

  3. 重启 mysql (brew services restart mysql)

    如果在重启之前没有修改用户的密码插件,会提示密码错误,无法连接。

1
2
3
4
5
6
7
8
9
10
/** 创建用户 admin **/
CREATE USER 'admin'@'localhost' identified with mysql_native_password by '12345';

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;



/** 更改 root 用户, 12345是新密码 **/
alter user 'root'@'localhost' identified with mysql_native_password by '12345';

让 PHP 支持 caching_sha2_password

使用 PHP 7.1.16 之前的版本或者 PHP 7.2(PHP 7.2.4 之前的版本) 不支持 caching_sha2_password。

升级PHP到最新版就好了。