從MySQL5.7升級到8.0后首先會發現在創建用戶和授權大大不同;其次還有更多常規問題以及非常規問題的解決方案
寫本篇博客記錄踩過的坑
MySQL8.0配合ubantu18.04
一、創建用戶和授權
在mysql8.0創建用戶和授權和之前不太一樣了,其實嚴格上來講,也不能說是不一樣,只能說是更嚴格,mysql8.0需要先創建用戶和設置密碼,然后才能授權。
?
-- 為mysql創建用戶:root1 密碼為:root1? ? ? ? ? ? ? ? ? ?
CREATE USER root1 IDENTIFIED BY 'root1';
-- 查看下用戶root1的權限? ? ? ? ? ? ? ? ? ??
SELECT User,Host FROM user ;
或者 select host,user,authentication_string,plugin from user;
-- 給用戶root1在數據庫名為root1上賦上所有庫權限,@'%'表示從任意ip都可以訪問到這個數據庫? ? ? ? ? ? ?
GRANT ALL ON *.* TO 'root1'@'%';
?
如果還是用原來5.7的那種方式,會報錯誤:
grant?all?privileges?on?*.*?to?'sroot'@'%'?identified?by?'123123';
ERROR?1064?(42000):?You?have?an?error?in?your?SQL?syntax;?check?the?manual?that?corresponds?to
your?MySQL?server?version?for?the?right?syntax?to?use?near?'identified?by?'123123''?at?line?1
-- 生效
FLUSH PRIVILEGES;
-- 再次查詢 下權限
SELECT User,Host FROM user;
--修改密碼
在MySQL 8.04前,執行:SET PASSWORD=PASSWORD('[新密碼]');但是MySQL8.0.4開始,這樣默認是不行的。因為之前,MySQL的密碼認證插件是“mysql_native_password”,而現在使用的是“caching_sha2_password”。
處理方法:
進入命令行界面
use mysql;alter user 'root'@'%'identified with mysql_native_password by 'root1';flush privileges;
基本改密碼問題已經解決了
?
?
還有可能(我沒遇到_參考csdner)
MySql 這個棒棒的更新,從8.0開始修改密碼有了變化,在user表加了字段authentication_string,修改密碼前先檢查authentication_string是否為空
1、如果不為空
use mysql;?
update user set authentication_string='' where user='root';--將字段置為空
ALTER?user?'root'@'localhost'?IDENTIFIED?BY?'root';--修改密碼為root
2、如果為空,直接修改
ALTER?user?'root'@'localhost'?IDENTIFIED?BY?'root';--修改密碼為root
還有種SB情況,navicate for mysql 會提示版本需要更新,例如這樣
Client does not support authentication protocol requested by server
?
問題解決
?————————————————??————————————————??————————————————?
二、MySQL8.0 的遠程鏈接
MySQL8.0 安裝完成后、
① 登錄MySQL
執行命令為:mysql -u root -p?
回車后輸入密碼
② 選擇 mysql 數據庫
執行命令為:use mysql;
查看mysql 數據庫中存儲的用戶信息的 user 表。
③?查看mysql 數據庫的 user 表中當前 root 用戶的相關信息
執行命令為:select host,user,authentication_string,plugin from user;
會顯示剛剛出創建的用戶為 ’% ‘既可以直接連接外網,不過還需要賦權操作訪問全部databases;
?
執行完命令后顯示一個表格, root 用戶的 host默認顯示的 localhost,說明只支持本地訪問,不允許遠程訪問。
④ 更改 host 的默認配置
執行命令為:update user set host='%' where user='root';
⑤ 刷新
執行命令為:flush privileges;
之前以為這樣就行了,然后呢,在用navicat進行mysql的遠程連接時,可能出現了彈窗報錯(我沒出 借鑒csdner):
出現這個原因是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; #刷新權限?
問題就解決了。
?