2012-05-11 98 views
0

我有一個腳本,連接到遠程MySQL主機執行一些查詢。 經過一段時間後,它會掛起一條消息'MySQL服務器已經消失'。 我有一個動態IP,每天至少改變3次,並且我意識到它在IP更改時掛起。PHP腳本掛在本地IP更改

所以我修改劇本,以檢測這種錯誤,請等待30 - 90秒,重新連接到服務器,但現在它掛在該重新連接的嘗試。

這發生在Linux和Windows。

這可能是什麼原因造成的?

編輯:我認爲這是明顯的,但改變了IP是在腳本運行的本地IP,MySQL服務器是在一個固定的IP。本地PC連接到ADSL路由器,我猜我的ISP正在強制重新連接(IP變化)。 我知道在IP更改所有現有的連接丟失,包括。 MySQL,但我說我在IP更改上重新連接,它無法重新連接!

+2

您已經回答了您的問題。當您的IP更改時,所有現有連接都將丟失。 – Brad

+2

TCP連接(例如到MySQL服務器的連接)不會在IP更改中持續存在。 – eggyal

+0

歡迎來到StackOverflow!請向我們展示一些代碼,以便我們看到發生了什麼問題。 – Kaii

回答

1

你是如何獲得新的IP地址?如果您使用的是DNS(包括動態DNS),我的猜測是您正在碰到一個陳舊的DNS緩存。即使大多數TTL超過90秒的動態DNS條目(以及一些中間緩存服務器也可能會設置最小的TTL)。這種行爲

+0

我不知道DNS的問題在這裏,我用遠程服務器的IP(而不是域名)連接,這是一個固定的IP –

+0

@ MarioLjubicic啊,對不起,我看到你的編輯問題,澄清它是*客戶* IP變化。我已經將你的原始問題解釋爲表示*服務器* IP正在改變。儘管如此,我將在此留下我的迴應,以便任何人通過搜索找到您的問題。 –

1

一個原因可能是持久的數據庫連接。爲了澄清是否屬於這種情況,請在IP地址更改的情況下重新啓動Apache或IIS Web服務器。如果一切正常後重新啓動你得到它。

Persistent database connections存儲在後臺,如果數據庫連接的主機名和用戶憑據匹配重用。 mysql庫有所作爲:持久連接的mysql_pconnect和非持久連接的mysql_connect

此外,您可以檢查您的php.ini的設置mysql.allow_persistent

+0

持久連接已啓用,但我沒有使用持久連接! –