连接MySQL时报错:
1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client
客户端不支持服务器请求的认证协议;考虑升级MySQL客户端
该如何解决呢?
原因及解决方法
mysql8 之前的版本中加密规则是 mysql_native_password,而在 mysql8 之后,加密规则是 caching_sha2_password。所以要把mysql用户登录密码加密规则还原成mysql_native_password
- 登录mysql客户端:
1 | mysql -u root -p |
- 执行以下命令:
1 | alter user 'root'@'localhost' identified with mysql_native_password by 'password'; |
'root'
就是用户名,'localhost'
就是用户的访问权限,'password'
就是用户密码。
如果出错:
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
则执行以下语句查看用户权限:
1 | use mysql; |
1 | +------------------+-----------+ |
可以看到,这里用户root
的访问权限为%
,即任意远程主机都可访问,而不是默认的localhost
。
所以上文中第二步执行的命令也要注意修改用户名和权限:
1 | alter user 'root'@'%' identified with mysql_native_password by 'password'; |
搞定。
还报错?
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
没办法,试试以下操作吧,不知道行不行。把代表密码的authentication_string
字段先置为空,然后再设置符合策略的密码:
1 | update user set authentication_string='' where user='root'; |
flush privileges;
可以不执行,不过可能会出错,自己试试吧。
参考文章
ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘_JAVA|Mr.Java的博客-CSDN博客