一不小心把MySQL密碼忘記了,該怎么辦?
本文轉載自微信公眾號「 Java極客技術」,作者 鴨血粉絲。轉載本文請聯系 Java極客技術公眾號。
一、問題背景
很久之前,在centos服務器上安裝了mysql5.7的數據庫,但是很長時間沒有使用過,里面有很多寶貴的數據,但是不幸的是密碼忘記了~~。
此時,就想是否有一種辦法,能找回密碼或者修改密碼的方案。
于是,就在網上找了一些方案,大體用的最多的就是skip-grant-tables解法。
廢話不多說,直接開擼!
二、解法詳解
本例的操作系統是centos7,mysql是5.7的版本,可能不同版本的命令稍有不同,網友可以自行根據系統版本查詢相關命令。
2.1、skip-grant-tables模式啟動
skip-grant-tables表示,在啟動mysql時不啟動授權表功能,可以直接免密碼登錄
- #修改/etc/my.cnf文件
- vim /etc/my.cnf
- #在[mysqld]區域添加配置,并保存my.cnf文件
- skip-grant-tables
- #重啟mysql
- systemctl restart mysqld
- #登錄mysql
- mysql -u root -p
- #如果出現輸入密碼,直接回車,就可以進入數據庫了
2.2、修改root密碼
- #登錄mysql,此時還沒有進入數據庫,使用如下命令
- 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、新增管理員用戶
如果你不想修改root密碼,可以新增一個管理員用戶,操作如下:
- #登錄mysql,此時還沒有進入數據庫,使用如下命令
- use mysql;
- #刷新數據庫
- flush privileges;
- #創建一個用戶,并賦予管理員權限
- grant all privileges on *.* to '用戶'@'%' identified by '密碼';
- #例如,創建一個admin用戶,密碼為admin
- grant all privileges on *.* to 'admin'@'%' identified by 'admin';
2.4、重啟服務器
上面操作完成之后,其實還沒有完,需要關閉授權表功能,重啟服務器
- #修改/etc/my.cnf文件
- vim /etc/my.cnf
- #在[mysqld]區域刪除改配置,并保存my.cnf文件
- #skip-grant-tables
- #重啟mysql
- systemctl restart mysqld
- #此時,修改完畢
三、測試連接
使用我們剛剛新建的admin用戶進行測試登錄
- #admin登錄
- mysql -u admin -p
- #輸入密碼admin,此時可以登錄
四、總結
如果您也出現忘記密碼的情況,可以使用此方法解決當前問題。
mysql5.7.6版本后,廢棄user表中password()方法,所以舊方法重置密碼對mysql8.0版本是行不通的!
mysql8可以采用此方法修改root密碼:
- #在skip-grant-tables模式下,將root密碼置空
- update user set authentication_string = '' where user = 'root';
- #退出,將/etc/my.cnf文件下的skip-grant-tables去掉,重啟服務器
- #登錄mysql
- mysql -u root -p
- #因為密碼置空,直接回車,進入數據庫之后,修改密碼
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hello@123456';
- #因為mysql8,使用強校驗,所以,如果密碼過于簡單,會報錯,密碼盡量搞復雜些!

























