1. 程式人生 > >mysql密碼忘記如何重置root密碼

mysql密碼忘記如何重置root密碼

很久沒有玩資料庫,果然又忘了mysql的root密碼,一頓操作重置,啪啪啪一堆報錯,記錄一下。說明: mysql密碼重置其實是修改資料庫mysql下的user表中密碼欄位。
但是沒有密碼連線都連不上咋個整?

一、啟動安全+免驗證模式

①關閉服務:

sudo service mysql stop

②安全模式+免驗證啟動服務

sudo /usr/bin/mysqld_safe --skip-grant-tables

如果順利啟動成功,那麼可以調到第二步了。
當然我並不順利,在這裡遇到了報錯:

mysqld_safe Directory '/var/run/mysqld' for UNIX socket
file don't exists.

這裡寫圖片描述
“/var/run/mysqld” 這個目錄不存在?這個目錄是幹什麼的?具體不詳知,只知道在程式啟動中會向這個目錄讀寫一些東西。
解決方法:建立目錄並修改許可權。

sudo mkdir /var/run/mysqld
sudo chmod 777 /var/run/mysqld

再執行②啟動mysql,啟動成功~
這裡寫圖片描述

二、連線伺服器,修改密碼

第一步執行成功後,就可以免驗證連線伺服器了。
①新開一個終端,連線伺服器:

mysql -u root

用show databases; 檢視資料庫,發現伺服器中會有好幾個資料庫:
這裡寫圖片描述
在開頭說過mysql的密碼其實是儲存在名為“mysql”的資料庫中,所以切換到mysql資料庫。
②切換到mysql資料庫:

use mysql;

③修改密碼
這裡要根據版本來執行不同的SQL語句了,因為版本不同,儲存密碼的欄位可能不相同。5.7以前的版本可以用以下語句更新root密碼:

update user set password = password('123456') where user='root';

如果順利的話,root的密碼應該已經被修改為“123456”,那可以不必往下看了。
然而我的mysql版本是5.7.21,所以第一次嘗試的時候這裡又報錯了:

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

這裡寫圖片描述
表中沒有password欄位,可以用desc user;指令看一下果然沒有。
查資料發得知5.7版本密碼儲存欄位已經改成上圖中的“authentication_string”了,於是重新輸入update指令重置密碼:

update user set authentication_string = password('123456') where user='root';

這裡寫圖片描述
修改成功!

三、重啟mysql服務並連線

先殺死第一步中啟動的程序,命令列Ctrl + Z 並不能殺死程序。
先檢視程序:

ps -a | grep mysql

這裡寫圖片描述
使用kill -9 pid 殺死程序,然後啟動mysql服務即可。

sudo service mysql restart
mysql -u root -p

這裡寫圖片描述
結束。