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登入了