突然忘記 MySQL 登陸密碼,怎么辦?
一、問(wèn)題背景
很久之前,在 centos7 服務(wù)器上安裝了一個(gè) mysql5.7 的數(shù)據(jù)庫(kù),不過(guò)很長(zhǎng)時(shí)間沒(méi)有使用過(guò),記得里面有一些重要數(shù)據(jù),最近想起來(lái)可以用起來(lái),但是密碼忘記了。
此時(shí),就想是否有一種辦法,能找回密碼或者修改密碼的方案。
于是,就在網(wǎng)上找了一些方案,大體用的最多的就是skip-grant-tables
解法。
二、解法詳解
本例的操作系統(tǒng)是centos7,mysql是5.7的版本,可能不同版本的命令稍有不同,網(wǎng)友可以自行根據(jù)系統(tǒng)版本查詢(xún)相關(guān)命令。
2.1、skip-grant-tables模式啟動(dòng)
skip-grant-tables表示,在啟動(dòng)mysql時(shí)不啟動(dòng)授權(quán)表功能,可以直接免密碼登錄
#修改/etc/my.cnf文件
vim /etc/my.cnf
#在[mysqld]區(qū)域添加配置,并保存my.cnf文件
skip-grant-tables
#重啟mysql
systemctl restart mysqld
#登錄mysql
mysql -u root -p
#如果出現(xiàn)輸入密碼,直接回車(chē),就可以進(jìn)入數(shù)據(jù)庫(kù)了
2.2、修改root密碼
#登錄mysql,此時(shí)還沒(méi)有進(jìn)入數(shù)據(jù)庫(kù),使用如下命令
use mysql;
#修改root密碼(mysql5.7版本)
update user set authentication_string = password('密碼'), password_expired = 'N',password_last_changed = now() where user = 'root';
#如果你的mysql是5.6版本修改root密碼(mysql5.6版本)
update user set password=password('密碼') where user='root';
#使其生效
flush privileges;
#退出
exit;
2.3、新增管理員用戶(hù)
如果你不想修改root密碼,可以新增一個(gè)管理員用戶(hù),操作如下:
#登錄mysql,此時(shí)還沒(méi)有進(jìn)入數(shù)據(jù)庫(kù),使用如下命令
use mysql;
#刷新數(shù)據(jù)庫(kù)
flush privileges;
#創(chuàng)建一個(gè)用戶(hù),并賦予管理員權(quán)限
grant all privileges on *.* to '用戶(hù)'@'%' identified by '密碼';
#例如,創(chuàng)建一個(gè)admin用戶(hù),密碼為admin
grant all privileges on *.* to 'admin'@'%' identified by 'admin';
2.4、重啟服務(wù)器
上面操作完成之后,其實(shí)還沒(méi)有完,需要關(guān)閉授權(quán)表功能,重啟服務(wù)器
#修改/etc/my.cnf文件
vim /etc/my.cnf
#在[mysqld]區(qū)域刪除改配置,并保存my.cnf文件
#skip-grant-tables
#重啟mysql
systemctl restart mysqld
#此時(shí),修改完畢
三、測(cè)試連接
使用我們剛剛新建的admin用戶(hù)進(jìn)行測(cè)試登錄
#admin登錄
mysql -u admin -p
#輸入密碼admin,此時(shí)可以登錄
四、總結(jié)
如果您也出現(xiàn)忘記密碼的情況,可以使用此方法解決當(dāng)前問(wèn)題。
mysql5.7.6版本后,廢棄user表中password()方法,所以舊方法重置密碼對(duì)mysql8.0版本是行不通的!
mysql8可以采用此方法修改root密碼:
#在skip-grant-tables模式下,將root密碼置空
update user set authentication_string = '' where user = 'root';
#退出,將/etc/my.cnf文件下的skip-grant-tables去掉,重啟服務(wù)器
#登錄mysql
mysql -u root -p
#因?yàn)槊艽a置空,直接回車(chē),進(jìn)入數(shù)據(jù)庫(kù)之后,修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
#因?yàn)閙ysql8,使用強(qiáng)校驗(yàn),所以,如果密碼過(guò)于簡(jiǎn)單,會(huì)報(bào)錯(cuò),密碼盡量搞復(fù)雜些!