簡體   English   中英

PHP-無法連接到遠程MySQL數據庫

[英]PHP - Can't connect to a remote MySQL database

我有一個MySQL數據庫,由我托管在Windows服務器上,我想從遠程Web服務器查詢它。 當我嘗試使用PHP連接到MySQL數據庫時(我知道,我應該使用mysqli):

$connection = @mysql_connect("203.0.113.0:3306", "username", "password");

無論是否指定端口,經過長時間的加載,我都會收到此錯誤,錯誤errorno2003

無法連接到“ 203.0.113.0”上的MySQL服務器(4)

這是在托管MySQL服務器的服務器上的命令提示符下運行netstat -n時得到的信息: http : //pastebin.com/pbRJNqCZ 它填滿了屏幕,所以我無法復制所有內容,但是我知道其他所有內容(我看到了幾個端口,值為3306,這是MySQL端口):

TCP    127.0.0.1:port        127.0.0.1:port        ESTABLISHED

當我運行netstat -a | find "LISTENING" netstat -a | find "LISTENING"我得到: http : //pastebin.com/Lqj2BrQK

到目前為止,這是我所知道的:

  • MySQL服務器沒有啟動不是一個錯誤,因為我可以在本地連接到它。
  • 網絡服務器無法連接到MySQL數據庫不是一個錯誤,因為我可以連接到其他數據庫
  • 這不是身份驗證錯誤(用戶名和密碼正確,並且遠程服務器具有權限)
  • 這不是端口轉發錯誤,因為端口3306在TCP和UDP上都被轉發。
  • 能夠連接到托管服務器的計算機並不是一個錯誤,因為我可以對其進行ping操作。
  • 服務器不僅在本地主機接口上偵聽。 my.cnf文件中,注釋了skip-networkingbind-address

如何編輯我的連接代碼,或編輯我的MySQL服務器以解決此錯誤?

總結我們的討論/聊天

在my.cnf中綁定網絡地址0.0.0.0:bind-address bind-address = 0.0.0.0並確保已注釋掉skip-networking或不存在skip-networking

檢查netstat -a | find "LISTENING" netstat -a | find "LISTENING"

根據您的pastebin的說法,有一個服務正在監聽3306。測試服務器本身的NIC地址上的端口是否可訪問。 這樣,外部防火牆不會生效。 一個簡單的測試是嘗試通過telnet連接到該端口。 nmap工具可以捕獲更多詳細信息。 Nmap已顯示已過濾的mysql端口。 這會導致本地數據包篩選器出現問題,在本例中為Windows防火牆。

確保將Windows防火牆配置為允許從所有或特定計算機對TCP端口3306的公共訪問。 在公共配置文件中設置規則,或者,如果兩個服務器都由同一個域控制器控制,則在域配置文件中設置規則。 從本地計算機的訪問成功后,請從遠程Web服務器嘗試相同的操作。

如果無法正確配置對MySql端口的遠程訪問,請考慮在兩台計算機之間建立SSH隧道。 一旦建立,您就可以訪問MySql,就像它在本地計算機上一樣。 然后,該端口將通過隧道轉發,並且在數據庫服務器端,您可以通過localhost環回IP訪問該服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM