1. 程式人生 > >mysql8.XXX版本以後重置密碼,修改加密方式解決Authentication plugin 'XXX' cannot be loaded問題

mysql8.XXX版本以後重置密碼,修改加密方式解決Authentication plugin 'XXX' cannot be loaded問題

在經過千辛萬苦終於把mysql8裝到linux上,發現登入不知道密碼,很尷尬

這裡需要將密碼重置一下.但是都不知道密碼是啥怎麼登入mysql操作修改呢?還是回到/etc/my.cnf
增加skip-grant-tables

這樣就可以跳過登陸的密碼了,但是能操作的也很有限,所以還是需要密碼

然後我們mysql -uroot -p
直接回車不輸入任何東西


成功的進來了.
接下來就是操作資料庫

use mysql;

select host, user, authentication_string, plugin from user; 

可以看到user表是這樣的

表格介紹:

  • host: 允許使用者登入的 ip ‘位置’ % 表示可以遠端;

  • user: 當前資料庫的使用者名稱;

  • authentication_string: 使用者密碼(在mysql 5.7.9以後廢棄了password欄位和password()函式);

  • plugin: 密碼加密方式;

尤其是plugin,這個跟mysql8之前的版本不一樣,是一個挖坑點.(感覺自從mysql被oracle收購後為了資料安全後完全不管人性化了)

我們先把密碼去掉

update user set authentication_string='' where user='root';

quit; 

然後我們再vi /etc/my.cnf註釋掉或刪除skip-grant-tables

重啟mysql服務

service msqld restart

再重新登陸

mysql -u root -p

回車直接進去

使用 ALTER 修改 root 使用者密碼
此處先不急著操作,後面還有坑!!

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

注意這個密碼如果設定的比較簡單,例如 123456 等等,會設定不成功,它會提示你設定的密碼太簡單,最好設定成大寫字母、數字、符號的組合。這個也是新版mysql的一個特點,MySQL 5.7.6 以後廢棄了 user 表中的 password 欄位和 password() 方法,所以使用舊的方法去重置密碼對 mysql 8.0 是不行的!

到這裡只是完成了一半.
現在在本機上登陸是沒有問題的,但是如果在其他主機上連線過來,會發現連不上

Host xxxx is not allowed to connect to this MySql server

這個可以往上看看user那個表,host裡面都是清一色的localhost,也就是隻有localhost才能pass,所以我們需要將root這個host改成萬用字元%,讓所有的主機都能登陸

在本機上登陸mysql

user mysql;

update user set Host='%' where User='root';

這樣是不是就可以了呢?
其實並不會,還有一個坑

Authentication plugin 'caching_sha2_password' cannot be loaded

這是因為mysql把密碼加密方式改了,而很多資料庫軟體目前都還沒反應過來,還是用的以前的密碼認證,所以通不過,沒辦法,只能先把加密方式換成我們以前版本的

登入mysql


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

FLUSH PRIVILEGES;

# 檢視一下現在的user表
select host, user, authentication_string, plugin from user; 


# 檢視一下現在的user表
select host, user, authentication_string, plugin from user; 


可以看到plugin那我們已經換過來了

現在就可以正常的使用小海豚或者navicat Premium登入了