1. 程式人生 > 資料庫 >Navicat出現無法遠端連線MySql伺服器問題的解決辦法

Navicat出現無法遠端連線MySql伺服器問題的解決辦法

Navicat無法遠端連線MySql伺服器問題的解決方法寫在前面:

作業系統:中標麒麟4.0;
資料庫:MySQL5.7.26;
JDK:採用中標麒麟系統自帶的openjdk;
客戶端工具:Navicat;

前置條件:
MySQL服務安裝完畢;

情景:

安裝好mysql,本地訪問正常,但同一個區域網內的機器都無法訪問該伺服器上的mysql資料庫;

原因:

mysql預設是不可以通過遠端機器訪問的,只允許本地訪問,通過下面的配置可以開啟遠端訪問;

排查思路:

mysql設定遠端訪問主要從以下三個方面去檢測:首先檢查網路,兩臺計算機之間必須能ping通,這是基礎;第二:檢測3306埠,對於埠只允許本機訪問,有兩個地方啟用,一個是mysql配置繫結本機地址,另一個就是防火牆啟用3306;第三:mysql使用者訪問許可權的問題。

根據思路逐一排查

1.網路檢測:

ping mysql所在主機的ip地址
看是否能ping通,如果能ping通,說明不是網路的問題;
我的可以ping通,說明不是網路的問題;

2.埠檢測:

檢測3306埠:
netstat -ntpl | grep 3306,如圖:

在這裡插入圖片描述

檢測22埠:
netstat -ntpl | grep 22,如圖:

在這裡插入圖片描述

綜上可以看出22埠監聽所有地址,而3306埠只監聽了本地地址,所以遠端無法訪問。對於埠只允許本機訪問,有兩個地方啟用,一個是防火牆啟用3306,另一個就是mysql配置繫結本機地址。所以Navicat無法連線遠端MySQL這個問題我們找到問題所在了,我們只需將3306埠允許遠端訪問即可;

解決辦法:
一般情況下,我們只需要去修改/etc/mysql/my.cnf配置檔案即可,將my.cnf配置檔案中的bind-address=127.0.0.1改成bind-address=0.0.0.0,並且把skip-networking註釋掉即可;

但是我的my.cnf配置檔案中並沒有bind-address=127.0.0.1和skip-networking這兩行程式碼,我就自己加上了bind-address=0.0.0.0這行程式碼,以為會好使,重啟系統後,結果,並沒有卵用!!!再次檢測3306埠,發現還是隻允許本地訪問,就在我百思不得其解的時候,配置檔案中的一句註釋引起了我的注意~此處有驚喜,問題馬上就可以解決了 > . <

然後我們再去看/etc/mysql/my.cnf配置檔案,發現了一句話,如圖:

在這裡插入圖片描述

“從以下配置目錄匯入所有的以.cnf結尾的檔案”,嘖嘖嘖,有沒有種恍然大悟的感覺?也就是說address=127.0.0.1這行配置沒有在my.cnf配置檔案中配置,可能在那兩個目錄下的某一個配置檔案中配置了,所以我們就去找找看看唄,無論如何得把“address=127.0.0.1”這行程式碼找到。

首先去第一個目錄:/etc/mysql/conf.d,進去看一下cnf.d檔案,如圖:

在這裡插入圖片描述

沒有“address=127.0.0.1”;

再去第二個目錄中:/etc/mysql/mariadb.conf.d/,發現下面有5個以.cnf結尾的檔案,分別是:50-client.cnf , 50-mysql-clients.cnf , 50-mysqld_safe.cnf , 50-server.cnf , my.cnf,如圖:

在這裡插入圖片描述

用腦子猜一下,你也知道該去看哪個檔案了,沒錯,我鎖定了“50-server.cnf”檔案,進去一看,果然找到了“address=127.0.0.1”這行程式碼,把它改成“address=0.0.0.0”即可,如圖:

在這裡插入圖片描述

然後重啟計算機(注意這裡必須要重啟計算機,重啟mysql沒用,我重啟mysql是沒用),再檢視埠,如下:

在這裡插入圖片描述

開心嗎,終於改過來了,不得不吐槽一下MySQL,不光得看它配置檔案中的配置,連配置檔案裡的註釋我們也不能忽略,嘖嘖嘖,我也是夠服氣的~~長記性了!

然而埠檢測這一步還沒有完,MySQL配置檔案我們檢測完了,還有一個地方,防火牆3306埠是否開啟;

防火牆檢測:
檢視:iptable --list
我查了一下,我的防火牆沒有開啟,如果有防火牆要開啟防火牆3306埠,或者直接關閉防火牆;

到現在為止,3306埠檢測就沒有問題了。

3.mysql使用者訪問許可權:

進入mysql資料庫:mysql -uroot -p
use mysql;
查詢使用者訪問許可權:
select host,user from user;如圖:

在這裡插入圖片描述

mysql建使用者時會指定一個host,預設是127.0.0.1(localhost),只能本機訪問,其他機器用這個使用者賬號訪問時會提示沒有許可權,將host改為“%”,表示允許所有機器訪問。(我這裡已經改成允許所有機器訪問了)
修改的語句為:grant all on . to ‘root'@'%' identified by ‘root使用者的密碼' with grant option;
flush privileges;

還有一個值得注意的地方是:要刪除“多餘的使用者”,就拿我自己來說,我之前有兩個root使用者,如下:
user host
root %
root 127.0.0.1
這個時候為了避免出錯,就可以把127.0.0.1的那個root使用者刪除掉了(我這裡就掉進坑裡了,我是在修改密碼的時候掉這個坑裡了,修改的是%的root的密碼,結果我一直用127.0.0.1的root登入,一直登不上去,,,);

總結

綜上所述,mysql設定遠端訪問的問題就解決了,總結一下,mysql設定遠端訪問主要從以下三個方面去檢測:首先檢查網路,兩臺計算機之間必須能ping通,這是基礎;第二:檢測3306埠,對於埠只允許本機訪問,有兩個地方啟用,一個是mysql配置繫結本機地址(修改mysql配置檔案(友情提示,不一定是my.cnf哦~要仔細閱讀配置檔案中的內容~)bind-address=0.0.0.0),另一個就是防火牆啟用3306(檢測防火牆);第三:mysql使用者訪問許可權的問題。

這是我曾經踩過的坑,覺得值得一記,所謂的經驗,不過是踩過的坑多了,遇見的問題多了,然後解決了,從坑裡跳出去了,經驗也就有了,積累經驗,從自己踩過的每一個坑開始,然後不斷的提升自己,加油!

到此這篇關於Navicat出現無法遠端連線MySql伺服器問題的解決辦法的文章就介紹到這了,更多相關Navicat無法遠端連線MySql伺服器問題內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!