1. 程式人生 > >解決Navicat連線MySQL出現1251-Client does not support authentication protocol requested by server;

解決Navicat連線MySQL出現1251-Client does not support authentication protocol requested by server;

MySQL 是最流行的關係型資料庫管理系統,在WEB應用方面 MySQL 是最好的RDBMS(Relational Database Management System:關係資料庫管理系統)應用軟體之一。

一:MySQL的安裝

在windows下面,點選mysql下載連結,去下載頁面下載,下載頁有安裝包和解壓包兩種,隨便下載哪種都可以。

下載完之後,安裝包選擇安裝,安裝過程當中會設定初始的一些賬戶名稱和密碼,要記住。解壓包就解壓在你想解壓的資料夾下面就可以了。現在資料夾下面一般是沒有data目錄(一個空的目錄結構)和my.ini檔案的,所以這就需要自己新建。

其中,my.ini檔案內容比較簡單,如下:

[mysqld]
basedir=C:\Program Files\MySQL\MySQL Server 8.0
datadir=C:\Program Files\MySQL\MySQL Server 8.0\data 
port = 3306
character-set-server=utf8
#忘記密碼時使用
#skip-grant-tables
#設定協議認證方式(重點啊)
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8

二:設定MySQL的環境變數

這個都比較簡單,在win10介面左下角查詢框當中去查詢"高階系統設定",然後彈出下面這個介面

設定完成之後,編輯Path系統變數:在系統變數裡,找到Path變數,點選“編輯”按鈕,我們將;%MYSQL_HOME%\bin新增到path變數(一般放在最後面),注意如果前面有還有其他的配置,一定要在前面加上英文的分號(半形)。MYSQL_HOME不是必須的,為了以後mysql重新安裝到其他目錄下的更改方便,畢竟Path系統變數比較多,修改容易出錯,因此也可直接在Path變數中新增:C:\Program Files\MySQL\MySQL Server 8.0\bin

三:出現的一個錯誤

在安裝完MySQL的時候,我們現在一般都使用Navicat來連線資料庫,可惜出現下面的錯誤:1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client。

出現上述問題的原因是:mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password 把mysql使用者登入密碼加密規則還原成mysql_native_password

我安裝的時候是使用的安裝包去安裝的,所以新建了幾個使用者,cmd命令,連線mysql,查詢系統當中所有的使用者。

1.檢視MYSQL資料庫中所有使用者

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

2.修改加密規則,因為最新版的加密規則好像不一樣,安裝的過程當中是有提示的。

mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER;

3.修改使用者的認證規則

mysql> alter user '使用者名稱'@'%' identified with mysql_native_password by '密碼';

例如我的使用者名稱是admin,密碼是123456,那麼,我修改的規則如下

mysql> alter user 'admin'@'%' identified with mysql_native_password by '123456';

其中還有'使用者名稱'@'%'和'使用者名稱'@'localhost'的區別,一個是任意連線,一個是本地連線。

4.重新整理許可權

mysql> flush privileges;

5.停止並重啟服務

mysql> net stop mysql
mysql> net start mysql

這裡需要注意的是:mysql這個是你的mysql服務的名稱,具體名稱如何查詢呢?假如你的服務名稱為MySQL80,那麼mysql就得改成MySQL80。

現在再去用Navicat去連線資料庫,就不會出現上述的問題了。