mysql修改完密碼無法再次登陸

2023-01-20 20:51:27 字數 1718 閱讀 5858

現象:修改完root密碼之後,退出mysql,重啟mysql服務,然後想用新密碼登陸mysql,發現登不上去了。

一,碰到這種問題的原因是,在給使用者改密碼的時候沒有使用password()函式對密碼加密。如下:

mysql>

update user set password='[email protected]' where user='root';

query ok, 3 rows affected (0.00 sec)

rows matched: 3 changed: 3 warnings: 0

mysql>

quit

# mysql -u root -p

enter password: ********

error 1045 (28000): access denied for user 'root'@'localhost' (using password: yes)

使用select查詢

mysql庫裡的user表,可以發現在user表中,密碼都是以加密的形式存在的。

mysql>

select * from user where user="root";

....

| localhost | root | *a00c34073a26b40ab4307650bfb9309d6bfa6999 | y           | y           | y           | y

....

如果直接指定‘set password='[email protected]' ,mysql就會認為'[email protected]'是一個加密後的字串,所以與這個加密字串對應的

密碼自然不是'[email protected]'了,而是另外一個位置的值。

正確的修改root密碼的命令應該是

mysql>

update user set password=password('[email protected]')where user='root';

二,現在知道原因了。但是我們登不上資料庫,怎麼辦呢。解決方法如下:

1,找到當前資料庫程序,並將其殺死

2,進入到mysql的安裝目錄,進入到bin目錄,執行mysqld_safe --skip-grant-tables (預設安裝路徑/usr/local/mysql/bin)

經過這一步,mysql服務就會以一種忽略使用者許可權的方式啟動,就能使用mysql進行無密碼登陸了。可以通過ps aux | grep mysql檢視服務已經啟動

3,重新開啟一個控制檯,再次執行'mysql'命令,這次可以無密碼登陸了

4,使用正確的命令重新修改密碼

5,使用密碼登陸,ok了

6,最好使用以下命令重新整理一下系統許可權(不然別人還可以無密碼登陸)

mysql> flush privileges;

query ok, 0 rows affected (0.00 sec)