mysqli::query():MySQL服务器已经消失-php和MySQL

mysqli::query():MySQL服务器已经消失-php和MySQL,php,mysql,mysqli,connection,database-connection,Php,Mysql,Mysqli,Connection,Database Connection,致命错误:未捕获异常“ErrorException”,消息为“mysqli::query():第2108行的functions.php中的MySQL服务器已消失” ErrorException:mysqli::query():MySQL服务器在第2108行的functions.php中消失 ================= 我有一个php脚本,运行了40-50分钟,连接到云中两台不同机器上的DBs,插入和更新多个查询,但有时在脚本末尾的一次简单选择失败。计算机是Windows Server 2

致命错误:未捕获异常“ErrorException”,消息为“mysqli::query():第2108行的functions.php中的MySQL服务器已消失”

ErrorException:mysqli::query():MySQL服务器在第2108行的functions.php中消失

=================

我有一个php脚本,运行了40-50分钟,连接到云中两台不同机器上的DBs,插入和更新多个查询,但有时在脚本末尾的一次简单选择失败。计算机是Windows Server 2008R2

我在不同的帖子中使用了Apache和MySQL的参数。 我还做了一个重置连接功能,可以随时重置DB连接,但最终还是出现了上述错误。 我的脚本适用于中的许多场景,但至少重置连接应该可以工作。除了重置函数中的连接外,我还只在php脚本结束时关闭它一次

至少重置连接的正确方法是什么

MySQL my.ini:

[mysqld]
max_allowed_packet = 128M
connect-timeout=10800
wait_timeout = 28800
阿帕奇:

KeepAlive On
Php重置函数

function reset_connection()
{
$counter = 100;
$sleep_time = 100;
global $sql,$SERVER,$user,$pass,$db_name,$port;

    $sql->close();
    $sql= new mysqli($SERVER, $user, $pass, $db_name, $port);

    while (mysqli_connect_errno() && $counter>0)
    {
        sleep($sleep_time);
        $counter--;

        printf("Connect failed retrying:".mysqli_connect_error());
        $sql= new mysqli($SERVER, $user, $pass, $db_name, $port);
    }

    if(mysqli_connect_errno() || $counter<=0)
    {
        printf("Connect failed".mysqli_connect_error());
    }
}
功能重置\u连接()
{
$counter=100;
$sleep_time=100;
全局$sql、$SERVER、$user、$pass、$db_name、$port;
$sql->close();
$sql=newmysqli($SERVER、$user、$pass、$db\u name、$port);
while(mysqli_connect_errno()&&$counter>0)
{
睡眠(睡眠时间);
$counter--;
printf(“连接失败重试:”.mysqli_Connect_error());
$sql=newmysqli($SERVER、$user、$pass、$db\u name、$port);
}

如果(mysqli_connect_errno()| | |$counter)执行php脚本的时间不到40-50分钟,那么将其作为cron作业运行如何?我知道可能查询和多查询尚未优化,但累积的时间是由于等待其他API的响应。