CC PHP——>Mysql Aborted connection to db:错误信息


CC PHP --> Mysql Aborted connection to db: error message

我试图在PHP连接一个mysql数据库与PDO。都在一个自建的手臂系统上。

如果在php中查询sql:

$sql="SELECT  volume FROM measurements ORDER BY ID DESC LIMIT 1;";

都可以,但是如果我添加一个额外的条目,比如:

$sql="SELECT  volume , temp , humidity  FROM measurements ORDER BY ID DESC LIMIT 1;";

给我一个空白页。

    PHP日志显示没有错误
  • 在php中激活额外的错误信息->相同的
  • webserver lighttpd,将不会显示任何错误信息

我的Mysql服务器带来这个错误信息,每次如果我试图打开我的网页:2015-03-31T22:09:09.886345Z 26[注意]连接XXX到db: 'database' user: 'user' host: 'localhost'(读取通信包错误)

如果我查找netstat -a | grep mysql他们给我展示了很多mysql打开的连接,比如:

tcp 0 0 localhost:49050 localhost:mysql TIME_WAIT

这是我的最小PHP代码:

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
try {
    $conn = new PDO("mysql:host=127.0.0.1;dbname=fair_database", "root", "12345");
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="SELECT  volume , temp , humidity, co2, pressure  FROM measurements ORDER BY ID DESC LIMIT 1;";
    foreach ($conn->query($sql) as $row) {
        $first_volume = number_format ( $row['volume'],1);
        $first_temp = number_format ( $row['temp'],1);
        $first_humidity = number_format ( $row['humidity'],1);
        $first_co2 = number_format ( $row['co2'],1);
        $first_pressure = number_format ( $row['pressure'],0);
    }
      $conn=null;
    }
catch(PDOException $e)
    {
        echo "Connection failed: " . $e->getMessage();
    }  
?>

和额外的调试,我添加这个:

<?php
// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);
// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };
    return(TRUE);
};
register_shutdown_function('ShutdownHandler');
// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );
    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };
    return(print(@sprintf("%s Error in file 'xBB%s'xAB at line %d: %s'n", $name, @basename($file), $line, $message)));
};
$old_error_handler = set_error_handler("ErrorHandler");
// other php code
?>

结果是一样的,只有一个空白页,没有php错误。其他错误将被记录在php错误日志文件中。: - (

我试图扩大最大的包和等待时间从mysql,但没有帮助。在这种情况下我该怎么办呢?谢谢你

编辑:发现很多失败,我改什么来找我的问题

您的应用程序在Linux上运行吗?如果应用程序更频繁地创建和关闭连接,就会发生这种情况。TCP连接需要几个步骤来关闭连接,如果你的应用程序在关闭连接之前死了,运行MySql的服务器会等待一段时间来进行必要的TCP握手。

你可以尝试增加MySql的max_connections来增加更多的连接空间。如果问题仍然存在,请尝试调整/etc/sysctl.conf

中的内核参数
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_recycle = 1

同时请检查应用程序是否正确处理连接