PHP测试远程MySQL服务器是否可用

时间:2012-09-26 18:53:54

标签: php mysql

我有一些使用MySQL的网站。我不是SQL的专家,所以我使用简单的连接,查询等。有时(很少见但发生)只有数据库服务器挂起,或者我忘了打开我的家庭测试mysql。直到它再次运行,服务器挂起尝试连接,最后发生超时错误。

我正在尝试添加一些以前的数据库服务器测试,例如这个“ping”函数:

function pingDomain($domain){
    $starttime = microtime(true);
    $file = fsockopen ($domain, 80, $errno, $errstr, 10);
    $stoptime = microtime(true);
    $status = 0;

    if (!$file) {
        $status = -1; // Site is down
    } else {
        fclose($file);
        $status = ($stoptime - $starttime) * 1000;
        $status = floor($status);
    }

    return $status;
}

但是也没用,php还是挂了。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

简单使用mysql_ping:

            <?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);
            ?>

您可能想看看这个:

mysql_ping

答案 1 :(得分:0)

无法找到有关mySQL服务器可靠而简单的测试的文档。我现在使用以下技术:

@$this->Base = mysqli_init();
@$this->Base->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);
@$this->Base->real_connect($host, $usuario, $senha, $bd);

比你用$ this-&gt; Base-&gt; connect_error或$ this-&gt; Base-&gt; connect_errno捕获错误,由于“@”符号,它不会被写入。

您也可以使用程序表格:

$Link = mysqli_init();
mysqli_options($Link, MYSQLI_OPT_CONNECT_TIMEOUT, 1);
$res = @mysqli_real_connect($host, $usuario, $senha, $bd);
if($res) {
    $E->echop("Connected!!!");
} else {
    $E->echop("Huston, we got a problem...");
}

欢迎评论和其他答案!