ERROR[2054]
php连接mysql报错如下:
The server requested authentication method unknown to the client,错误代码[2054]
原因:
MySQL 5.8 默认会使用 caching_sha2_password 扩展, 老版本的 PHP 驱动(mysqlnd)无法识别这个扩展。目前只有 mysql_xdevapi 扩展是 支持 MySQL 的 caching_sha2_password 扩展的。
解决方法 一:
配置 my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
然并卵,在5.8.11上并未成功,github上有人成功,大家可以试一下先。
解决方法 二:
$ mysql -u root -p //命令行下连接数据库
mysql> use mysql;
mysql> SELECT plugin FROM user WHERE user = 'root'; //语句可查看目标用户扩展,可见 caching_sha2_password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; //修改扩展
//此处可输入原密码或使用新密码,目的使用 mysql_native_password 更新密码。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
搞定!
ERROR[1045]
1045 using password: YES
这是本文中可能出现的错误,原因是修改了扩展而忘记更新密码,导致密码加密方式无法匹配,验证密码正确(YES)但无法登录。其它权限问题也可导致 1045 YES,本文不做解决。
1045 using password: NO
此为纯纯的密码错误,没的说,解决方法与上一致,所以也带上。
解决方法:
配置 my.cnf,添加以下内容
[mysqld]
skip-grant-tables
保存退出,重启SQL服务。
$ mysql -u root -p
mysql> use mysql;
// 因 mysql 8 已废除 password 字段和 password() 函数,无法直接修改密码,需先将密码置空
mysql> UPDATE user SET authentication_string = '' WHERE user = 'root';
移除之前在 my.cnf 中添加的 skip-grant-tables
,保存重启SQL服务,并重新连接mysql,使用空密码登录
$ mysql -u root -p
mysql> use mysql;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
mysql> FLUSH PRIVILEGES;
问题彻底解决。
密码错误的,直接使用UPDATE更新密码即可,记着最后取消skip-grant-tables
就好。
mysql> use mysql;
mysql> UPDATE user SET password = PASSWORD('newpassword') WHERE user = 'root';
mysql> \q;
掰掰
网友评论