MySQL5.7升级到8.0 之后,配合ubantu18.04遇到的常规问题以及非常规问题的解决方案
從MySQL5.7升級(jí)到8.0后首先會(huì)發(fā)現(xiàn)在創(chuàng)建用戶和授權(quán)大大不同;其次還有更多常規(guī)問題以及非常規(guī)問題的解決方案
寫本篇博客記錄踩過的坑
MySQL8.0配合ubantu18.04
一、創(chuàng)建用戶和授權(quán)
在mysql8.0創(chuàng)建用戶和授權(quán)和之前不太一樣了,其實(shí)嚴(yán)格上來講,也不能說是不一樣,只能說是更嚴(yán)格,mysql8.0需要先創(chuàng)建用戶和設(shè)置密碼,然后才能授權(quán)。
?
-- 為mysql創(chuàng)建用戶:root1 密碼為:root1? ? ? ? ? ? ? ? ? ?
CREATE USER root1 IDENTIFIED BY 'root1';-- 查看下用戶root1的權(quán)限? ? ? ? ? ? ? ? ? ??
SELECT User,Host FROM user ; 或者 select host,user,authentication_string,plugin from user;-- 給用戶root1在數(shù)據(jù)庫名為root1上賦上所有庫權(quán)限,@'%'表示從任意ip都可以訪問到這個(gè)數(shù)據(jù)庫? ? ? ? ? ? ?
GRANT ALL ON *.* TO 'root1'@'%';?
如果還是用原來5.7的那種方式,會(huì)報(bào)錯(cuò)誤:
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;-- 再次查詢 下權(quán)限
SELECT User,Host FROM user;--修改密碼
在MySQL 8.04前,執(zhí)行:SET PASSWORD=PASSWORD('[新密碼]');但是MySQL8.0.4開始,這樣默認(rèn)是不行的。因?yàn)橹?#xff0c;MySQL的密碼認(rèn)證插件是“mysql_native_password”,而現(xiàn)在使用的是“caching_sha2_password”。
處理方法:
進(jìn)入命令行界面
use mysql;alter user 'root'@'%'identified with mysql_native_password by 'root1';flush privileges;基本改密碼問題已經(jīng)解決了
?
?
還有可能(我沒遇到_參考csdner)
MySql 這個(gè)棒棒的更新,從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 會(huì)提示版本需要更新,例如這樣
Client does not support authentication protocol requested by server
?
問題解決
?————————————————??————————————————??————————————————?
二、MySQL8.0 的遠(yuǎn)程鏈接
MySQL8.0 安裝完成后、
① 登錄MySQL
執(zhí)行命令為:mysql -u root -p?
回車后輸入密碼
② 選擇 mysql 數(shù)據(jù)庫
執(zhí)行命令為:use mysql;
查看mysql 數(shù)據(jù)庫中存儲(chǔ)的用戶信息的 user 表。
③?查看mysql 數(shù)據(jù)庫的 user 表中當(dāng)前 root 用戶的相關(guān)信息
執(zhí)行命令為:select host,user,authentication_string,plugin from user;
會(huì)顯示剛剛出創(chuàng)建的用戶為 ’% ‘既可以直接連接外網(wǎng),不過還需要賦權(quán)操作訪問全部databases;
?
執(zhí)行完命令后顯示一個(gè)表格, root 用戶的 host默認(rèn)顯示的 localhost,說明只支持本地訪問,不允許遠(yuǎn)程訪問。
④ 更改 host 的默認(rèn)配置
執(zhí)行命令為:update user set host='%' where user='root';
⑤ 刷新
執(zhí)行命令為:flush privileges;
之前以為這樣就行了,然后呢,在用navicat進(jìn)行mysql的遠(yuǎn)程連接時(shí),可能出現(xiàn)了彈窗報(bào)錯(cuò)(我沒出 借鑒csdner):
出現(xiàn)這個(gè)原因是mysql8 之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password, 解決問題方法有兩種,一種是升級(jí)navicat驅(qū)動(dòng),一種是把mysql用戶登錄密碼加密規(guī)則還原成mysql_native_password. 我用是第二種方式 :
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密規(guī)則?
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用戶的密碼?
FLUSH PRIVILEGES; #刷新權(quán)限?
問題就解決了。
?
總結(jié)
以上是生活随笔為你收集整理的MySQL5.7升级到8.0 之后,配合ubantu18.04遇到的常规问题以及非常规问题的解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于肌电的机器学习
- 下一篇: 【MySQL】Linux端-实现Mysq