MySQL8.x登陸root用戶突然提示mysql_native_password的實(shí)現(xiàn)
1、在mysql 8.0x版本中,默認(rèn)的加密認(rèn)證方式從原來的mysql_native_password 變成了caching_sha2_password,如果我們不在my.cnf里面去設(shè)置加密認(rèn)證方式的話,它默認(rèn)用的就是caching_sha2_password
2、但現(xiàn)在有一個很奇怪的現(xiàn)象,不知道是何種原因,即便我們創(chuàng)建了用戶,并且也設(shè)置了caching_sha2_password,但是它默認(rèn)還是會以mysql_native_password作為認(rèn)證,這樣就會導(dǎo)致mysql_native_password模式被拒絕,因?yàn)槟J(rèn)情況下mysql只會接受caching_sha2_password,特別是在部分情況下,root用戶的localhost也會變成mysql_native_password,那這樣就會導(dǎo)致我們在使用mysql -uroot -p -h localhost登陸的時候直接被拒絕掉,從而顯示ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded,這個具體問題不知道是什么原因?qū)е碌?,后面再去定位,現(xiàn)在只是做個記錄,如果出現(xiàn)了這種情況應(yīng)該怎么做
3、由于我的mysql容器是以docker-compose來運(yùn)行的,如果我們root用戶被擋了,只能以安全模式跳過root認(rèn)證,需要修改docker-compose的配置文件如下
version: '3.8' services: mysql82: image: mysql:8.4 container_name: mysql ports: - "3306:3306" volumes: - /mnt/mysql/data:/var/lib/mysql - /mnt/mysql/logs:/var/log/mysql - /mnt/mysql/conf/my.cnf:/etc/mysql/my.cnf environment: MYSQL_ROOT_PASSWORD: "你自己的root密碼" TZ: Asia/Shanghai command: --skip-grant-tables
在底部添加command: --skip-grant-tables即可,然后重啟容器
4、如果是宿主機(jī)安裝的方式,需要停止mysql的服務(wù),然后用安全模式啟動
systemctl stop mysql mysqld_safe --skip-grant-tables &
5、修改完畢后,登陸mysql
mysql -uroot -p
這時候應(yīng)該是不需要密碼直接按回車就能進(jìn)入
6、查看用戶表,看下當(dāng)前有哪些用戶的認(rèn)證模式是:mysql_native_password
USE mysql; SELECT User, Host, plugin FROM user;
不出意外的話,如果我們root用戶被擋了,那么認(rèn)證模式肯定變成了mysql_native_password
但是默認(rèn)情況下mysql_native_password插件又沒有啟動,所以我們在正常模式下會被擋在外面,這就是問題所在
但問題是我們壓根就不知道m(xù)ysql_native_password是如何被啟動的,或者root用戶為啥從原來的caching_sha2_password 變成了mysql_native_password
7、如果localhost 的root用戶的認(rèn)證模式變成了mysql_native_password,這也是為何我們沒辦法進(jìn)去的原因,我們需要把它改成caching_sha2_password,這樣我們就可以登錄了
USE mysql; UPDATE user SET plugin='caching_sha2_password', authentication_string='' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
注意:我們這里是直接修改root的認(rèn)證模式,然后authentication_string='' 設(shè)置的是一個空的字符串密碼,這里不可以直接指定你的root密碼,因?yàn)槭敲魑牡?,mysql不允許,也不接受,所以就先保留空,等后面進(jìn)入到正常模式再去修改
8、將mysql設(shè)置成正常模式
如果是docker-compose啟動的,把command: --skip-grant-tables這一行推薦注釋掉(萬一以后還要出現(xiàn)直接打開即可)
然后docker-compose down && docker-compose up -d
宿主機(jī)安裝的情況下,直接ps aux | grep "mysqld_safe --skip-grant-tables"
把這個進(jìn)程給kill掉,
然后systemctl start mysql正常啟動即可
9、進(jìn)入到正常模式后,由于localhost的root用戶此時是空密碼,直接按回車就可以進(jìn)去,進(jìn)去之后立即修改root的密碼,密碼還是可以設(shè)置成原來的,然后在改密碼的時候再指定認(rèn)證類型為caching_sha2_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '這里最好是設(shè)置成你原來的root密碼';
10、修改完成之后,我們退出來重新登錄驗(yàn)證一下新修改的密碼能不能使用localhost登錄進(jìn)去
mysql -uroot -p
11、如果可以登陸的話,說明我們被擋在外面的問題就解決掉了,接下來就是把其他用戶認(rèn)證類型為mysql_native_password改成caching_sha2_password,這里主要是修改用戶的密碼和認(rèn)證方式,所以修改之前最好保持和知道之前原來的密碼,這樣可以減少很多不必要的操作,特別是如果這個用戶是某一個代碼里使用的
假設(shè)root用戶已經(jīng)登錄進(jìn)來了,說明root用戶的認(rèn)證模式已經(jīng)改回來了
接下來我們在查看一下其他用戶的認(rèn)證情況
USE mysql; SELECT User, Host, plugin FROM user;
根據(jù)結(jié)果提示,把mysql_native_password的用戶都改成caching_sha2_password
這里的修改認(rèn)證類型主要是通過修改該用戶的密碼,然后再重新指定認(rèn)證類型
但是在修改之前,最好將該用戶的密碼修改成和之前一樣的,這樣可以減少很多不必要的麻煩,當(dāng)然你也可以使用新的自定義密碼
#假如我現(xiàn)在需要將javatest這個用戶的認(rèn)證類型從原來的mysql_native_password改成caching_sha2_password,使用如下SQL語句即可,但是修改之前要看一下該用戶之前授權(quán)的遠(yuǎn)程IP地址是什么,要嚴(yán)格的對應(yīng)上,我這里是%,你們根據(jù)實(shí)際情況修改 ALTER USER 'javatest'@'%' IDENTIFIED WITH 'caching_sha2_password' BY '該用戶的新密碼'; #刷新權(quán)限 FLUSH PRIVILEGES;
12、到此完成
到此這篇關(guān)于MySQL 8.x登陸root用戶突然提示mysql_native_password的文章就介紹到這了,更多相關(guān)MySQL 8.x登陸root用戶突然提示mysql_native_password內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL如何使用DATE_FORMAT()對查詢結(jié)果按日、周、月分組統(tǒng)計(jì)
這篇文章主要介紹了MySQL如何使用DATE_FORMAT()對查詢結(jié)果按日、周、月分組統(tǒng)計(jì)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04Linux連接mysql報錯:Access denied for user ‘root’@‘localhost’(usi
這篇文章主要給大家介紹了關(guān)于Linux連接mysql數(shù)據(jù)庫報錯:Access denied for user ’root‘@’localhost‘(using password: YES)的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01簡單了解MySQL union all與union的區(qū)別
這篇文章主要介紹了簡單了解MySQL union all與union的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03MySQL實(shí)現(xiàn)數(shù)據(jù)批量更新功能詳解
最近需要批量更新大量數(shù)據(jù),習(xí)慣了寫sql,所以還是用sql來實(shí)現(xiàn),下面這篇文章主要給大家總結(jié)介紹了關(guān)于MySQL批量更新的方式,需要的朋友可以參考下2023-02-02