【发布时间】:2011-02-20 13:18:30
【问题描述】:
我有一个网络应用程序,它有一个主 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 线程,但没有看到任何解决此问题的线程。
【问题讨论】: