繁体   English   中英

PHP在没有mysql_connect超时问题的情况下检查从站状态

[英]PHP Check slave status without mysql_connect timeout issues

我有一个web-app,它有一个master mysql db和四个slave dbs。 我想处理来自从属的所有(或几乎所有)只读(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秒才能放弃尝试连接到localhost并返回脚本。 这会导致大量的页面服务积压并基本上关闭系统(由于响应时间非常慢)。

有没有人知道通过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秒内响应数据库请求。 相信你的服务器构建。

然后修复你的奴隶下降!! 这是一个问题!!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM