1、原因:
因为mysql8升级了密码的验证方式 caching_sha2_password, 之前一直是mysql_native_password方式,而php都升级到7.2+不支持caching_sha2_password。
2、解决方法:
找到mysql的配置文件my.cnf,我的配置文件位置在/usr/local/etc/my.cnf(请自行找到自己的电脑的配置文件地址)。(docker容器是在/etc/mysql/my.conf)
2.1 在 [mysqld]下加入 一行
default_authentication_plugin=mysql_native_password
2.2 重启mysql
(Docker容器直接重启MySql容器即可)
3 进入mysql 修改登入mysql用户的登录验证方式
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;#刷新权限
提示:最好在创建用户的时候就加上:
CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
完成以上就可以进行客户端连接测试,如果还是不成功,则继续向下执行:
4.对远程连接进行授权:
mysql> GRANT ALL ON *.* TO 'root'@'%';
5.更改密码的加密规则:
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
6.更改root的密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
7.刷新权限:
mysql> flush privileges;