印象中,同帳號不同host可以並存,例如root@localhost和root@%,一直以來開發環境似乎都是這樣。
但今天遇到phpmyadmin的使用者帳號列表提示訊息:因為同帳號有host為locahost的,會導致host為%的帳號無法登入。所以索性刪了root@locahost的使用者,結果還是無法登入,後來推想應該是另一組帳號空白的localhost造成的。
但此時因為已經刪除root@localhost,結果沒辦法再新增刪除使用者。這時可以找到my.ini或my.cnf裡的mysqld段落加上skip_grant_tables,例如:
[mysqld]
skip_grant_tables
加上後要重啟mysql。這時應該就可以利用系統裡還有的使用者帳號登入。
但因為使用skip_grant_tables,有些需要用到權限的指令沒辦法用,但還是可以使用sql存取資料表,所以我就直接使用sql去刪除mysql.user裡的指定帳號,以解決上述同帳號不同host造成的無法登入問題。
刪除後記得要將上述的skip_grant_tables給移除或註解。
重新再登入就可以成功了。