詳解mysql如何配置遠程鏈接,解決各種連接問題


  在服務器上面我們經常需要去使用mysql,有些童鞋剛剛配置好了服務器,想在本地的一些圖形化軟件去連接mysql得到更直觀的表格顯示,此時很可能不允許連接,為了探究為什么連接失敗,在這里我會對mysql里的mysql數據庫的user表進行分析,相信看完之后,大致的權限以及主機的連接問題,都會迎刃而解

  1.問題分析

  基本每個mysql都會有名為mysql的數據庫,里面存放的是mysql的核心東西,其中user表里面就有mysql連接的用戶信息,里面的字段有如下

    1.Host    (允許連接的主機,%代表全部主機可以連接)

    2.User    (連接的用戶名)

    3.password  (連接的密碼,密碼用mysql自帶的password函數加密)

    4.Select_priv   (是否允許查詢,Y表示允許,N表示拒絕)

    5.Alter_priv  (是否允許插入數據,Y表示允許,N表示拒絕)

  剩下都是一堆權限,和Select_priv的設置一樣,其實組合起來就很容易理解了,處在host地址的用戶User可以通過密碼password訪問數據庫對應的權限。

  舉個粟子:例如有以下記錄(省略部分權限字段)

+------+-------------------------------------------+--------------+-------------+

| user | password | Host | Select_priv |
+------+-------------------------------------------+--------------+-------------+
| root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | localhost | Y |

 

  ip地址在localhost的用戶root可以通過password函數加密之后密碼*B16BCB720468FF0ED1..為訪問數據庫,並可以使用Select_priv權限 。

  相信看到這里你已經明白了為什么,怎么不能連接mysql呢?其實就是你的條件沒有符合user表里的記錄,只要符合 用戶名(user),密碼(password),主機地址(Host),你就能訪問數據庫,至於權限,那就得看后面對應的字段。

  至於多條記錄之間同一個用戶是取交集還是取最新一條,我還沒測試過,我出問題的時候查詢數據庫是有以下記錄。

 +------+-------------------------------------------+--------------+-------------+

| user | password | Host | Select_priv |
+------+-------------------------------------------+--------------+-------------+
| root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | % | Y |
| root |  | localhost  | N|

   那時候遠程訪問需要密碼,但是可以全部權限可以訪問,但是在本地用命令行mysql -uroot -p密碼 連數據庫輸了密碼就錯,一狠心不輸入密碼,居然可以了,但是什么權限都沒有。一查數據庫看到上面的數據頓時知道出什么事了...

  最后一條記錄localhost限制了訪問權限,之后我一樣在本地訪問,但是指定了一下ip地址,讓mysql認為我是127.0.0.1,就可以訪問全部權限了...

  2.解決問題

  相信看到很多人就知道怎么做了,如果要遠程訪問數據庫,只需要把擁有全部權限的root賬號對應的記錄的Host字段改為%就可以了。在我這里數據庫顯示是這樣子(忽略若干權限...一般root賬戶如果后面Select_priv為Y,其他一般都全為Y)。

mysql> select user,Host,password,Select_priv from user;

+------+--------------+-------------------------------------------+-------------+
| user | Host | password | Select_priv |
+------+--------------+-------------------------------------------+-------------+
| root | localhost | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | Y |
| root | iz289q95684z | | Y |
| root | 127.0.0.1 | | Y |
| root | ::1 | | Y |
| | localhost | | N |
| | iz289q95684z | | N |
+------+--------------+-------------------------------------------+-------------+

   只要把第一條記錄改為的Host改為%就好了

  以下是命令:  

update user  set Host = '%' where Host = 'localhost' & user = 'root'; 
flush privileges;

  以上第一條命令為修改允許訪問的主機地址

  第二條命令為刷新權限

  只要執行上面的兩條命令就能遠程訪問服務器。當然啦,具體情況具體分析,可能你本地的數據庫記錄和我的不同,那么你只需要按着上面的介紹去調整就好了,最后別忘了執行flush privileges刷新一下。

   3.特殊情況

  如果你還是沒有解決問題,遠程連接還是連接不上,那么很有可能是你的mysql配置文件綁定了本地,你可以找到本地的mysql配置文件去進行修改,mysql配置文件叫my.cnf,如果找不到路徑可以用locate my.cnf去查找,在我這里就是/etc/mysql/my.cnf。在里面你會看到一系列的mysql配置信息,找到里面的bind-address,這個就是萬惡之源。把他注釋掉(在前面加#)再重啟mysql就OK了。

     萬惡的mysql,終於看到連接成功頁面了。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM