0

我有一个脚本可以连接到远程 MySQL 主机来执行一些查询。一段时间后,它会挂起一条消息“MySQL 服务器已消失”。我有一个动态 IP,每天至少更改 3 次,我意识到它在 IP 更改时挂起。

因此,我更改了脚本以检测此错误,等待 30 - 90 秒并重新连接到服务器,但现在它在重新连接尝试时挂起。

这发生在linux和windows上。

这可能是什么原因?

编辑:我认为这很明显,但是更改的 IP 是运行脚本的本地 IP,MySQL 服务器位于固定 IP 上。本地电脑连接到 ADSL 路由器,我猜我的 ISP 正在强制重新连接(IP 更改)。我知道在 IP 更改时,所有现有连接都将丢失,包括。MySQL,但我说我正在重新连接 IP 更改并且它无法重新连接!

4

2 回答 2

1

这种行为的一个原因可能是持久的数据库连接。为了澄清是否是这种情况,请重新启动您的 Apache 或 IIS Web 服务器,以防 IP 地址已更改。如果重启后一切正常,你就明白了。

持久数据库连接存储在后台,如果数据库连接的主机名和用户凭据匹配,则可以重复使用。mysql 库有所不同:mysql_pconnect用于持久连接,mysql_connect用于非持久连接。

此外,您可以检查 php.ini 的mysql.allow_persistent设置。

于 2012-05-12T16:10:34.557 回答
1

您如何获得新的 IP 地址?如果您使用的是 DNS(包括动态 DNS),我猜您会遇到过时的 DNS 缓存。即使是 TTL 超过 90 秒的大多数动态 DNS 条目(并且某些中间缓存服务器可能会设置最小 TTL)。

于 2012-05-11T18:14:34.450 回答