1. 程式人生 > >mysql修改完密碼無法再次登陸

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

color match 找到 修改密碼 進入 系統 tro spa root密碼

現象:修改完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)

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