mysql 登錄報(bào)錯(cuò):ERROR 1045 (28000):Access denied for user ‘root‘@‘localhost‘ (using password: Yes)
本文主要針對(duì)用戶(hù)名、密碼正確,但是登錄不了mysql的問(wèn)題的分析與解決。其他情況可再參考其他的貼子或資料,本文中不會(huì)再做過(guò)多介紹。
一:報(bào)錯(cuò)圖片信息

問(wèn)題分析:
提示信息翻譯:錯(cuò)誤 1045(28000):用戶(hù) 'root'@'localhost' 的訪問(wèn)被拒絕(使用密碼:是)
從翻譯過(guò)來(lái)的錯(cuò)誤信息中,我們可知數(shù)據(jù)庫(kù)拒絕了我們的訪問(wèn),才導(dǎo)致我們不能正常訪問(wèn)它。那么究竟是什么原因?qū)е滤o我們反饋了這個(gè)提示信息呢?我查閱了一些貼紙,出現(xiàn)這種問(wèn)題的原因有以下:
1. 用戶(hù)密碼或用戶(hù)信息錯(cuò)誤
2. 缺少權(quán)限
3……(其他后續(xù))
但是根據(jù)我的實(shí)際情況,我的問(wèn)題原因不在以上之列,所以還是得具體問(wèn)題,具體分析。我這里遇到的問(wèn)題是用戶(hù)名、密碼正確,但是登錄mysql卻登錄不了,總是返回用戶(hù)訪問(wèn)被拒絕,也就是上邊圖片中的錯(cuò)誤。
二:?jiǎn)栴}分析
1. 根據(jù)我出現(xiàn)的問(wèn)題,我猜測(cè)可能是密碼過(guò)期了,于是我想盡辦法去修改用戶(hù)密碼(根據(jù)各種up主提供的材料),但最終還是沒(méi)有解決。
2. 查詢(xún)用戶(hù)
用過(guò)跳過(guò)mysql的方式,進(jìn)入數(shù)據(jù)庫(kù)后,使用以下語(yǔ)句查詢(xún)用戶(hù)信息
select user,host from user;
查詢(xún)后發(fā)現(xiàn),user表中沒(méi)有了root 用戶(hù),因此導(dǎo)致了使用root用戶(hù)登錄系統(tǒng)被拒絕。那么是什么原因?qū)е铝藃oot用戶(hù)丟失呢?
三:解決辦法
針對(duì)丟失了root用戶(hù)導(dǎo)致mysql登錄被拒絕的問(wèn)題的解決辦法
1. 停止mysql服務(wù)
net stop mysql
2. 在my.ini中增加skip-grant-tables 參數(shù),如果啟動(dòng)服務(wù)后服務(wù)又立即停止,則需要增加shared-memory 參數(shù) ,此步驟主要是為了免密登錄mysql(PS 此步驟可以直接 在cmd中直接輸入:mysqld --console --skip-grant-tables --shared-memory)
(1)在my.ini中配置(shared-memory在啟動(dòng)服務(wù)后如果服務(wù)自動(dòng)停止)

(2)在命令行編輯器中直接使用mysqld --console --skip-grant-tables --shared-memory
以上兩種都能夠免密進(jìn)入到mysql,只是第二種需要一個(gè)單獨(dú)的命令行編輯器中啟動(dòng),并且不能關(guān)閉命令行編輯器??筛鶕?jù)實(shí)際情況進(jìn)行選擇
3. 使用mysql -u root 命令直接進(jìn)入mysql中

4. 進(jìn)入mysql后,需要使用use mysql命令切換到mysql數(shù)據(jù)庫(kù)

5. 進(jìn)入mysql后,使用select user,host from user;語(yǔ)句查詢(xún)用戶(hù)表中有哪些用戶(hù),正常情況下user表中應(yīng)包含以下用戶(hù)信息:

如果查詢(xún)的結(jié)果中沒(méi)有root用戶(hù),則root用戶(hù)可能已經(jīng)丟失了。

此時(shí)可使用以下命令創(chuàng)建root 用戶(hù)
# 創(chuàng)建sql
create user 'root'@'localhost' identified by '123456';
# 如果執(zhí)行此語(yǔ)句報(bào)錯(cuò),提示“The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement” 此時(shí)需要使用flush privileges;語(yǔ)句刷新,刷新后可執(zhí)行create 語(yǔ)句。
# 當(dāng)然如果不使用create 創(chuàng)建,那么可以使用insert into 語(yǔ)句將用戶(hù)信息插入user表內(nèi),具體如下:
insert into user(User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values('root','','','','');

6 分配權(quán)限:
# 分配權(quán)限 GRANT ALL PRIVILEGES ON *.* TO 'root'@localhost WITH GRANT OPTION;
7. 更新user表(設(shè)置mysql允許其他主機(jī)訪問(wèn))
update user set host='%' where user='root';
更新成功后建議使用 flush privileges;刷新一下

以上步驟完成后使用quit退出mysql,然后停止mysql服務(wù),在配置文件中注釋掉之前加的參數(shù)(如果是直接采用在cmd中輸入mysqld --console --skip-grant-tables --shared-memory的方式進(jìn)入的,直接關(guān)閉當(dāng)前的cmd窗口,然后啟動(dòng)服務(wù)即可),然后再啟動(dòng)服務(wù)。當(dāng)mysql服務(wù)重新啟動(dòng)成功后,使用mysql -u root -p 并輸入密碼的方式可成功訪問(wèn)mysql

四:mysql設(shè)置密碼永久不過(guò)期
此章節(jié),主要用戶(hù)驗(yàn)證以上問(wèn)題是否是密碼過(guò)期問(wèn)題導(dǎo)致
# 設(shè)置密碼永久不過(guò)期 alter user 'root'@'localhost' password expire never; # 注意 如果host被更改為% ,則需要使用以下語(yǔ)句進(jìn)行設(shè)置,否則系統(tǒng)會(huì)報(bào)“ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'”的錯(cuò)誤 alter user 'root'@'%' password expire never;

到此這篇關(guān)于mysql 登錄報(bào)錯(cuò):ERROR 1045 (28000):Access denied for user ‘root‘@‘localhost‘ (using password: Yes)的文章就介紹到這了,更多相關(guān)mysql ERROR 1045內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySql Group By對(duì)多個(gè)字段進(jìn)行分組的實(shí)現(xiàn)方法
這篇文章主要介紹了MySql Group By對(duì)多個(gè)字段進(jìn)行分組的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
MySQL更新刪除操作update和delete使用詳解(小白慎用)
這篇文章主要為大家介紹了MySQL的更新刪除操作update和delete使用但是一定要慎用啊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
MySQL數(shù)據(jù)文件存儲(chǔ)位置的查看方法
這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)文件存儲(chǔ)位置的查看方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
SQL中current_date()函數(shù)的實(shí)現(xiàn)
日期時(shí)間類(lèi)型的數(shù)據(jù)也是經(jīng)常要用到的,SQL中也提供了一些函數(shù)對(duì)這些數(shù)據(jù)進(jìn)行處理,本文主要介紹了SQL中current_date()函數(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值2024-02-02

