查看MySQL服务器是否已启动并运行的最佳方法

时间:2011-07-19 13:22:39

标签: php mysql

我有一个用PHP编写的Web应用程序的Master-Slave设置。我有一个用于读取的从属池,以及一个用于写入的主服务器(如果已经发送了此请求,则会读取)。我想为读取池中的已删除崩溃服务器合并一个自动化系统。目前我正在使用:

foreach($readers as $reader)
    {

        $fp = @fsockopen($reader['host'],3306,$errno,$errstr,1);
        if(!$fp)
        {
            //Remove from pool
        }
        unset($fp);
    }

我的主要问题是有一种更可靠的方法。我有很多误报,反之亦然,因为它实际上并没有检查MySQL服务器,而只是端口3306上的连接。有没有办法检查MySQL服务器而不引发异常,这是PHP中PDO和MySQLi扩展的行为。

3 个答案:

答案 0 :(得分:7)

您可以使用mysql_connect()并检查false的结果,并在成功时立即关闭连接。如果您愿意,可以创建一个没有特权的虚拟帐户。

这是唯一可靠的方法,特别是如果你想区分正在运行的MySQL服务器与侦听端口3306的任何其他随机进程。

答案 1 :(得分:0)

您可以使用mysql_ping()检查您打开的当前数据库连接是否仍然存在

以下是http://www.php.net/manual/en/function.mysql-ping.php

发布的示例
<?php
set_time_limit(0);

$conn = mysql_connect('localhost', 'mysqluser', 'mypass');
$db   = mysql_select_db('mydb');

/* Assuming this query will take a long time */
$result = mysql_query($sql);
if (!$result) {
    echo 'Query #1 failed, exiting.';
    exit;
}

/* Make sure the connection is still alive, if not, try to reconnect */
if (!mysql_ping($conn)) {
    echo 'Lost connection, exiting after query #1';
    exit;
}
mysql_free_result($result);

/* So the connection is still alive, let's run another query */
$result2 = mysql_query($sql2);
?> 

答案 2 :(得分:0)

检查任何服务是否存活的最佳方法是实际使用它。所以对于MySQL尝试连接并执行一些快速查询,为Web服务器尝试获取一些文件,为PHP尝试获取一些简单的脚本...

对于MySQL主/从设置,其中一个解决方案是实际检查复制状态。您可以检查主服务器后面的从服务器的数量,并决定在存在旧数据时/停止使用该服务器。 (我自己不做复制,但我认为你需要比较变量Read_Master_Log_PosRelay_Log_Pos