最近升级了mysql到最新版本,发现Laravel和sequel pro都连接不上Mysql了
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (2054);
PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] (0);
问题原因
- 老版本的密码认证插件:mysql_native_password
- 新版本(8.0以上)的密码认证插件改为:caching_sha2_password 从而导致一些语言或工具不支持
解决办法
将密码认证插件改回老版本:mysql_native_password
实现
1、因为我用的MAC,windows的应该差不多。如果不知道my.cnf文件在哪里,可以使用find查找。
sudo vim /usr/local/etc/my.cnf
2、按 i 键进入编辑模式,将以下内容复制到 [mysqld] 下 (密码认证插件改为旧版)
[mysqld]
default_authentication_plugin=mysql_native_password
3、保存退出
4、切换用户(root)的验证方式。先登录数据库
mysql -u root -p
5、依次执行以下命令
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password';
FLUSH PRIVILEGES;
可能有的同学会遇到这个问题:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这是因为密码策略不符合造成的,我们需要更换密码策略
执行以下命令查看策略
SHOW VARIABLES LIKE 'validate_password%';
结果如下图:
降低密码验证强度等级,将 validate_password.policy 的全局参数为 LOW 即可,输入以下命令:
set global validate_password.policy=LOW;
图2
此时再运行以上三个命令就OK了
6、完成后重启mysql,就可以使用php或工具连接上了
mysql.server restart
网友评论