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
“/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
結束。