2011-06-14 64 views
1

我最近在Windows家庭計算機上配置了一個MySQL服務器。此外,我還創建了一個使用0fees.net的網站 - 一個免費的託管服務提供商,該服務提供商提供了一個包括PHP支持,FTP文件託管,自己的MySQL服務器等各種服務的vista面板。到本地MySQL服務器的網站連接

網站,我已經創建了一個「登錄」PHP腳本,以便人們登錄到我的網頁。但是,我不想從在0fees.net上的cPanel上給予我的MySQL數據庫讀取數據,而是希望PHP登錄腳本直接從我在家用計算機上配置的MySQL服務器讀取。要做到這一點,我已經採取了多項措施:

1)使用MySQL服務器實例配置嚮導

在這種配置中配置MySQL的,我已經啓用了TCP/IP網絡上的3306端口(並啓用了防火牆例外該端口)並啓用了遠程機器的根訪問權限。

2)上的MySQL命令行的客戶端,我已經通過使用授予遠程訪問能力,以其他單位:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 

3)我已經轉發端口3306到我的路由器(和已經使用的各種端口檢查器確認它是開放的)

4)我創建了名爲「login.php」的登錄腳本,它位於我的站點的.htdocs目錄中,並在我的網站主頁上處理HTML登錄表單。它嘗試(並失敗)連接到我的本地MySQL服務器。那PHP腳本的目的片段是:

$host="my_external_ip:3306"; // External IP of my computer and port to listen on 
    $username="root"; // Username specified in the GRANT command-line-client command 
    $password="password"; // Password specified in the GRANT command-line-client command 
    $db_name="logon"; // MySQL database name 
    $tbl_name="accounts"; // Table name within the database 

    // Connect to server and select databse. 
    mysql_connect("$host", "$username", "$password")or die(mysql_error()); 
    mysql_select_db("$db_name")or die("cannot select DB"); 

當試圖連接到MySQL割斷,我得到一條錯誤消息:

Can't connect to MySQL server on 'my_external_ip' (4). 

還應當指出的是,我成功能夠通過端口3306使用相同的外部IP地址,從其他網絡上的其他機器(使用Navicat進行測試)遠程連接到本地MySQL服務器。有關我的網站爲何無法連接的任何想法?

在此先感謝您的任何見解。

+1

傳入流量那麼我可以告訴你,你的端口肯定是開並傾聽(不良想法張貼你的知識產權就像那樣)。 – 2011-06-14 20:30:21

+2

此外,創建一個不同於超級用戶的用戶來自php的連接是一個很好的習慣......您應該爲您的php連接創建一個具有受限特權的新用戶 – Damp 2011-06-14 20:33:46

+0

您的站點和本地站點之間是否存在代理? # – 2011-06-14 20:47:57

回答

3

因爲我可以告訴你的服務器肯定是(在一般的互聯網和可見的)上運行,有以下幾種可能:

  1. 你忘了執行FLUSH PRIVILEGES
  2. 您的用戶名或密碼錯誤
  3. 你免費主機提供商阻止連接

我的錢是在#3,也有很多優惠措施做到這一點。

+0

#3正是我的想法。 – 2011-06-14 20:35:51

+0

謝謝,現在我正在使用免費的網站託管服務。但是,如果我升級,我可以使用訪問主機功能啓用遠程連接。這會做詭計嗎? (假設是原因) – user797967 2011-06-14 20:36:31

+0

@ user797967:你的猜測和我的一樣好(可能更好)。我對這個託管服務提供商一無所知。從託管的角度來看,最好讓你的客戶使用*你的*數據庫,因爲那樣你就可以爲每個額外的數據庫收取費用(再加上整個安全性方面)。 – 2011-06-14 20:38:37

0

@克里斯提到,你的供應商可能會在端口3306這裏有一個快速的方法來檢查,如果是這樣的話,並避開它會阻止出站請求:

  1. 從80端口配置路由器端口轉發在路由器到您的箱子的端口3306。這將允許您從端口80以外的網絡連接到MySQL,而不是端口3306。

  2. 更改你的PHP代碼連接到您的IP端口80,而不是3306

你的託管服務提供商可能會阻止出站端口3306,但幾乎可以肯定不會阻止出站端口80級的請求(很多人使用CURL或Web服務等)。

+0

@Eric Petroelje感謝您的洞察力,但我不確定我完全理解第1步。 – user797967 2011-06-14 20:49:26

+0

@user - 您提到您已將「3306端口轉發到我的路由器(並已使用各種端口檢查器來確認它是打開)」。這是你需要改變的一步。在你的路由器的端口轉發設置中,你需要指定端口80上的連接應該被轉發到MySQL盒子上的端口3306(而不是轉發3306 - > 3306,現在轉發80 - > 3306)。希望清除一下 – 2011-06-14 20:51:45

+0

@Eric Petroelje-是的,非常感謝,我現在就試試 – user797967 2011-06-14 20:54:02

0

好吧,我將讓你在一個小竅門我學會了,你要做的就是進入wamp>mysql>my.ini和所有33063305替換然後保存並應用此防火牆和端口轉發3305。然後,當你進行遠程連接,簡單地做

mysql_connect("ip adress:3305", "username", "password"); 

我測試過這一點,它的工作原理,因爲網絡託管網站阻止端口3306