1. 程式人生 > 其它 >'Client does not support authentication protocol requested by server; consider upgrading MySQL client'

'Client does not support authentication protocol requested by server; consider upgrading MySQL client'

一、問題產生
在centOS 通過docker pull mysql下載mysql映象併成功啟動mysql容器。

當通過windows主機navicat連線虛擬的mysql時報如下錯誤。Client does not support authentication protocol requested by server; consider upgrading MySQL clien

二、原因查詢

通過檢視網上別人遇到的相關問題,發現是由於navicat版本的問題,出現連線失敗的原因:mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password。並提供了兩種解決方案

1.升級navicat,由於navicat是收費的,個人感覺升級會比較麻煩點。

2.把使用者密碼登入的加密規則還原成mysql_native_password這種加密方式,本人選擇第二種解決方案

三、問題解決
按照步驟

docker exec -it mysql bash 進入登入mysql

1.通過mysql -u root -p"123456" 進入mysql的命令列模式

2.輸入命令修改相關機密方法

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;這裡的password是你正在使用的密碼

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';#更新一下使用者的密碼這裡的password為你修改的新密碼。

FLUSH PRIVILEGES; #重新整理許可權,使自己的修改生效。

這時還是連線不上,然後通過telnet3306資料庫對應的介面,出現了8.0.11;S"3<VN,.Y\k4Ycaching_sha2_password這個資訊,是修改沒有生效還是其他原因?重啟容器之後還是不行。

然後use mysql;

查詢表中的相關資訊 select user,host,plugin from user where user='root'

;

這時發現了問題,原理剛剛修改的是localhost,對於非本機的連線密碼校驗規則還是沒有變。

alter user 'root'@'%' identified by 'password' password expire never;

alter user 'root'@'%' identified with mysql_native_password by 'why';//why是自己新修改的密碼。

flush privileges;再次重新整理一下許可權配置。

為了確定下,重新查一下,select user,host,plugin from user where user='root';

修改好了,再用宿主的window電腦訪問資料庫。