關於MySQL拒絕訪問的解決方法

當我們在使用一些開源項目的時候總是會遇到一些很奇怪的問題,而其他人又沒有遇到。比如我在使用開源博客solo的時候,就遇到了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

百度搜索基本都是什麼沒有權限,密碼錯誤之類的。而我在命令行輸入mysql -uroot -p是可以進入MySQL的,所以密碼是正確的,權限的話我照着別人的語句給root加了權限還是同樣的問題。這個時候怎麼辦呢?網友給出了答案:重裝MySQL、重裝docker,要不直接重裝系統得了(高手的做法,不敢苟同)。

既然通過上面這個錯誤無法搜索到我想要的結果,那麼只能換一個關鍵字了–MySQL密碼正確怎麼進不去。我翻了幾頁的搜索結果終於有一點頭緒了,因爲mysql沒有綁定本地地址 localhost、127.0.0.1。剛纔說我可以通過mysql -uroot -p進入SQL命令行,但是我通過mysql -uroot -h127.0.0.1 -p卻顯示拒絕訪問,而通過mysql -uroot -hlocalhost -p又能進入。

我們輸入如下語句就可以看到root賬戶綁定的地址

# 如果這個語句進不了,可以參考網上無密碼進入MySQL
mysql -uroot -p 
# 進入MySQL命令行之後
use mysql;
select host,user,password from user;

正常情況下,我們會看到

在這裏插入圖片描述
而我的機器上在localhost這一行,password並沒有值,而且沒有127.0.0.1這條記錄。這就導致了無法通過127.0.0.1進入了,我們需要向表中插入這個,保險起見在更新一下localhost的password密碼弄成和圖片一樣的效果(沒有對比圖,因爲我已經改了)。

出現這個問題的是我的Debian9.8系統,在centos上並沒有這種問題。我建議在安裝mysql之後,我們修改mysql的密碼不要
set password for root@localhost = password('123456');
最好使用
update user set Password = password('123456') where user = 'root';
這樣localhost和127.0.0.1都會增加密碼。而且在增加遠程訪問的時候不要直接修改localhost爲%,比如update user set host='%' where user='root';,這樣是修改字段,會導致本地訪問權限丟失,正確的做法應該是插入一條新紀錄。或者直接在mysql命令行執行

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "你的密碼";
#這個密碼可以和本地密碼不一樣,並不衝突

正常後的結果:
在這裏插入圖片描述
另外,防火牆放行相應端口,或者直接關閉防火牆就不用強調了吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章