mysql修改完密碼無法再次登陸
現象:修改完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修改完密碼無法再次登陸