MySQL root用戶(hù)密碼忘記的兩種情況及解決方案
引言
在使用MySQL數(shù)據(jù)庫(kù)的的過(guò)程中,不可避免的會(huì)出現(xiàn)忘記密碼的現(xiàn)象。普通用戶(hù)的密碼如果忘記,可以用更高權(quán)限的用戶(hù)(例如root)進(jìn)行重置。但是如果root用戶(hù)的密碼忘記了,由于root用戶(hù)本身就是最高權(quán)限,那這個(gè)方法就行不通了。本文介紹2種在忘記root用戶(hù)用戶(hù)密碼的情況下,如何進(jìn)行重設(shè)。
一、使用–init-file參數(shù)重設(shè)
由于忘記了root密碼,我們是無(wú)法通過(guò)root用戶(hù)連接到數(shù)據(jù)庫(kù)的,因此也無(wú)法通過(guò)客戶(hù)端執(zhí)行alter user或set password命令來(lái)重置密碼。MySQL提供了init-file參數(shù),在啟動(dòng)時(shí)可以讀取文件,我們將修改root用戶(hù)密碼的SQL放在文件中,通過(guò)重啟來(lái)執(zhí)行修改密碼命令。
假設(shè)我想要將root密碼修改為’abc123’,先測(cè)試一下,密碼是不對(duì)的:
mysql -uroot -pabc123

1.1 停止mysql進(jìn)程
下面演示的是通過(guò)kill命令殺死m(xù)ysqld進(jìn)程,如果可以正常停止也可以。
首先通過(guò)ps -ef | grep mysqld 查詢(xún)mysql數(shù)據(jù)庫(kù)的進(jìn)程號(hào):
ps -ef | grep mysqld

這里顯示數(shù)據(jù)庫(kù)相關(guān)的進(jìn)程有2個(gè)(第3個(gè)是grep命令),由于我是通過(guò)mysqld_safe腳本啟動(dòng)的數(shù)據(jù)庫(kù),因此有一個(gè)額外的守護(hù)進(jìn)程:
進(jìn)程號(hào)為23619的mysqld_safe守護(hù)進(jìn)程,負(fù)責(zé)監(jiān)控mysqld的狀態(tài)
進(jìn)程號(hào)為24846的mysqld進(jìn)程,這個(gè)是數(shù)據(jù)庫(kù)服務(wù)進(jìn)程(它的父進(jìn)程號(hào)23619)
查詢(xún)到進(jìn)程號(hào)后,使用kill命令依次將mysqld_safe和mysqld殺死,注意要先殺mysqld_safe,如果先殺mysqld,那么守護(hù)進(jìn)程檢測(cè)到mysqld進(jìn)程掛了,會(huì)立刻將mysqld重新啟動(dòng):
kill -9 23619 kill -9 24846

如果只有一個(gè)mysqld進(jìn)程,那么只要將其殺掉即可。
1.2 創(chuàng)建初始化文件
創(chuàng)建一個(gè)文本文件,名稱(chēng)隨意(這里是reset_password.sql),里面寫(xiě)上更改root密碼的SQL:
alter user 'root'@'localhost' identified by 'abc123';

文件創(chuàng)建后給mysql用戶(hù)增加讀取權(quán)限(通常使用操作系統(tǒng)的mysql用戶(hù)來(lái)啟動(dòng)數(shù)據(jù)庫(kù)進(jìn)程)
chmod a+r reset_password.sql

1.3 使用init-file參數(shù)重啟數(shù)據(jù)庫(kù)
使用–init-file=/root/reset_password.sql 參數(shù)啟動(dòng)數(shù)據(jù)庫(kù),啟動(dòng)時(shí)會(huì)自動(dòng)執(zhí)行文件種的密碼修改SQL:
mysqld_safe --init-file=/root/reset_password.sql & mysql -uroot -pabc123

可以看到啟動(dòng)后,root用戶(hù)的密碼已經(jīng)成功被修改為’abc123’,最后將reset_password.sql文件刪除即可。
二、使用–skip-grant-tables參數(shù)重設(shè)
MySQL的skip-grant-tables參數(shù)可以指定在啟動(dòng)時(shí)忽略權(quán)限認(rèn)證,這意味著任何用戶(hù)都可以不用密碼登陸數(shù)據(jù)庫(kù),并且具有所有權(quán)限,這是一個(gè)危險(xiǎn)的狀態(tài)。因此當(dāng)使用skip-grant-tables啟動(dòng)時(shí),MySQL會(huì)自動(dòng)啟用skip-networking參數(shù),禁止所有遠(yuǎn)程連接。
2.1 停止mysqld進(jìn)程
停止或殺掉mysqld進(jìn)程,參照上一節(jié)內(nèi)容。
2.2 使用skip-grant-tables重啟數(shù)據(jù)庫(kù)
使用skip-grant-tables參數(shù)啟動(dòng)數(shù)據(jù)庫(kù),并使用root用戶(hù)登陸:
mysqld_safe --skip-grant-tables & mysql -uroot -p

這里提示了Enter password:,但實(shí)際是不需要輸入密碼的,直接回車(chē)便可登陸。
2.3 修改root密碼
加載權(quán)限表并修改root密碼,這里將密碼修改為abc456:
flush privileges; alter user 'root'@'localhost' identified by 'abc456';

2.4 重啟數(shù)據(jù)庫(kù)
使用正常狀態(tài)重啟數(shù)據(jù)庫(kù)
mysqladmin shutdown mysqld_safe & mysql -uroot -pabc456

可以看到root用戶(hù)的密碼成功被修改為abc456
到此這篇關(guān)于MySQL root用戶(hù)密碼忘記的兩種情況及解決方案的文章就介紹到這了,更多相關(guān)MySQL root用戶(hù)密碼忘記內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 事務(wù)隔離級(jí)別及實(shí)際業(yè)務(wù)應(yīng)用場(chǎng)景
本文詳細(xì)介紹了MySQL的四種事務(wù)隔離級(jí)別(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),并探討了每種隔離級(jí)別在實(shí)際業(yè)務(wù)中的應(yīng)用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧2026-01-01
MySQL恢復(fù)中的幾個(gè)問(wèn)題解決方法
這篇文章主要介紹了MySQL恢復(fù)中的幾個(gè)問(wèn)題,需要的朋友可以參考下2016-01-01
mysql 5.7安裝 MySQL 服務(wù)無(wú)法啟動(dòng)但是服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤
這篇文章主要介紹了mysql 5.7安裝 MySQL 服務(wù)無(wú)法啟動(dòng)但是服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2017-04-04
MySQL數(shù)據(jù)庫(kù)索引的弊端及合理使用
索引可以說(shuō)是數(shù)據(jù)庫(kù)中的一個(gè)大心臟了,如果說(shuō)一個(gè)數(shù)據(jù)庫(kù)少了索引,那么數(shù)據(jù)庫(kù)本身存在的意義就不大了,和普通的文件沒(méi)什么兩樣,本文從細(xì)節(jié)和實(shí)際業(yè)務(wù)的角度看看在MySQL中B+樹(shù)索引好處2021-11-11
淺談mysql 系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制
這篇文章主要介紹了mysql 系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

