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