gpt4 book ai didi

没有 mysql_connect 超时问题的 PHP 检查从站状态

转载 作者:可可西里 更新时间:2023-11-01 08:22:41 25 4
gpt4 key购买 nike

我有一个网络应用程序,它有一个主 mysql 数据库和四个从属数据库。我想处理所有(或几乎所有)来自奴隶的只读 (SELECT) 查询。我们的负载均衡器自动将用户发送到其中一台从机,因为它们也在运行 Apache/PHP 并提供网页服务。我正在使用包含文件来设置与数据库的连接,例如:

//for master server (i.e. - UPDATE/INSERT/DELETE statements)
$Host = "10.0.0.x";
$User = "xx";
$Password = "xx";
$Link = mysql_connect( $Host, $User, $Password );
if( !$Link ) )
{
die( "Master database is currently unavailable. Please try again later." );
}

//this connection can be used for READ-ONLY (i.e. - SELECT statements) on the localhost
$Host_Local = "localhost";
$User_Local = "xx";
$Password_Local = "xx";
$Link_Local = mysql_connect( $Host_Local, $User_Local, $Password_Local );

//fail back to master if slave db is down
if( !$Link_Local ) )
{
$Link_Local = mysql_connect( $Host, $User, $Password );
}

然后我将 $Link 用于所有更新查询,将 $Link_Local 用作 SELECT 语句的连接。一切正常,直到从属服务器数据库出现故障。如果本地数据库出现故障,$Link_Local = mysql_connect() 调用至少需要 30 秒才能放弃尝试连接到本地主机并返回到脚本。这会导致大量页面服务积压,并基本上关闭系统(由于响应时间极慢)。

有人知道通过 PHP 处理与从属服务器的连接的更好方法吗?或者,是否有某种超时函数可用于在 2-3 秒后停止 mysql_connect 调用?

感谢您的帮助。我搜索了其他 mysql_connect 线程,但没有看到任何解决此问题的线程。

最佳答案

在 php.ini 的 [MySQL] 部分下,设置以下值:

; Maximum time (in secondes) for connect timeout. -1 means no limit
mysql.connect_timeout = 1

如果您有 4 个数据库从站,那么您应该有一个相当不错的网络,可以在 1 秒内响应数据库请求。相信您的服务器构建。

然后修理你的奴隶!这是个问题!!

最后,并不是每个页面请求都需要一个到主数据库的链接。您应该尝试放置一个连接管理器类,该类将根据查询类型决定使用哪个数据库。这也会减少与主数据库的连接数。

关于没有 mysql_connect 超时问题的 PHP 检查从站状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com