1. 程式人生 > 資料庫 >淺談mysql8.0新特性的坑和解決辦法(小結)

淺談mysql8.0新特性的坑和解決辦法(小結)

一、建立使用者和授權

在mysql8.0建立使用者和授權和之前不太一樣了,其實嚴格上來講,也不能說是不一樣,只能說是更嚴格,mysql8.0需要先建立使用者和設定密碼,然後才能授權。

#先建立一個使用者
create user 'hong'@'%' identified by '123123';

#再進行授權
grant all privileges on *.* to 'hong'@'%' with grant option;

如果還是用原來5.7的那種方式,會報錯誤:

grantallprivilegeson*.*to'sroot'@'%'identifiedby'123123';

ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondsto yourMySQLserverversionfortherightsyntaxtousenear'identifiedby'123123''atline1

二、MySQL8.0 的遠端連結

MySQL8.0 安裝完成後出現無法遠端連結的現象,這是因為MySQL8.0只支援 localhost 訪問,我們必須設定一下才可以遠端訪問。

具體設定步驟如下:

① 登入MySQL

執行命令為:mysql -u root -p

回車後輸入密碼

② 選擇 mysql 資料庫

執行命令為:use mysql;

檢視mysql 資料庫中儲存的使用者資訊的 user 表。

③檢視mysql 資料庫的 user 表中當前 root 使用者的相關資訊

執行命令為:select host,user,authentication_string,plugin from user;

執行完命令後顯示一個表格, root 使用者的 host預設顯示的 localhost,說明只支援本地訪問,不允許遠端訪問。

④ 更改 host 的預設配置

執行命令為:update user set host='%' where user='root';

⑤ 重新整理

執行命令為:flush privileges;

之前以為這樣就行了,然後呢,在用navicat進行mysql的遠端連線時,出現了彈窗報錯:


出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password,解決問題方法有兩種,一種是升級navicat驅動,一種是把mysql使用者登入密碼加密規則還原成mysql_native_password. 我用是第二種方式 :

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密規則
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';#更新一下使用者的密碼
FLUSH PRIVILEGES; #重新整理許可權

問題就解決了。

mysql8.0使用者密碼設定注意事項

在MySQL 8.0.11中,caching_sha2_password是預設的身份驗證外掛,而不是以往的mysql_native_password。有關此更改對伺服器操作的影響以及伺服器與客戶端和聯結器的相容性的資訊,請參閱caching_sha2_password作為首選的身份驗證外掛。(翻譯自https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html)

今天在新服務上配置安裝mysql8.0.11時,像往常一樣設定mysql密碼,設定成功後在shell下輸入mysql -u root -p,再輸入密碼能正常進入,但在phpmyadmin或直接用http://php.net/manual/zh/mysqli.real-connect.php上的連線,均提示無法連線,具體報錯資訊為

mysqli_real_connect(): The server requested authentication method unknown to the client [sha256_password]

搜了一圈,找到官方文件才發現從8.0.11版本起,不再像mysql5.7及以前版本那樣,設定使用者密碼時預設的驗證方式為caching_sha2_password,如果發現升級mysql8.0.11後原有的程式不能連線mysql,可迅速在mysql command line client客戶端用下面的命令設定成mysql5.7及以前版本的密碼驗證方式,同時MYSQL8.0.11下修改密碼的方式與原先也不大一樣,原先的部分修改密碼的命令在mysql8.0.11下不能使用。

> use mysql 

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼'; 

> FLUSH PRIVILEGES; 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。