一、問題產生
在centOS 通過docker pull mysql下載mysql鏡像併成功啓動mysql容器。
當通過windows主機navicat連接虛擬的mysql時報如下錯誤。Client does not support authentication protocol requested by server; consider upgrading MySQL client
二、原因查找
通過查看網上別人遇到的相關問題,發現是由於navicat版本的問題,出現連接失敗的原因:mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password。並提供了兩種解決方案
1.升級navicat,由於navicat是收費的,個人感覺升級會比較麻煩點。
2.把用戶密碼登錄的加密規則還原成mysql_native_password這種加密方式,本人選擇第二種解決方案
三、問題解決
按照步驟
1.通過mysql -uroot -p進入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電腦訪問數據庫。
這時已經連接成功,可以開始下步工作了。