'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電腦訪問資料庫。