我有一个Web应用程序,其中有一个主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,$Password );
}
然后,我将$Link用于所有更新查询,并将$Link_Local用作SELECT语句的连接.一切正常,直到从属服务器数据库关闭.如果本地数据库关闭,则$Link_Local = MysqL_connect()调用至少花费30秒,然后它才会放弃尝试连接到本地主机并返回到脚本.这会导致大量的页面服务积压,并且基本上会关闭系统(由于响应时间非常慢).
有谁知道通过PHP处理与从属服务器的连接的更好方法?或者,是否存在某种超时功能可用于在2-3秒后停止MysqL_connect调用?
最佳答案