#php #mysql #mysqli #connection #database-connection
#php #mysql #mysqli #подключение #подключение к базе данных
Вопрос:
Неустранимая ошибка: Неперехваченное исключение ‘ErrorException’ с сообщением ‘mysqli::query(): сервер MySQL исчез в functions.php на линии 2108’
ErrorException: mysqli::query(): сервер MySQL исчез в functions.php на линии 2108
=================
У меня есть php-скрипт, работающий в течение 40-50 минут и подключающийся к базам данных на 2 разных машинах в облаке, вставляя и обновляя multi_queries, но время от времени сбой при простом выборе почти в конце скрипта. Компьютеры — Windows Server 2008R2.
Я играл с параметрами как для Apache, так и для MySQL, как предлагалось в разных сообщениях. Я также создал функцию сброса подключения, чтобы время от времени сбрасывать подключение к БД, но я все равно получаю ошибку, указанную выше. Мой сценарий подходит для многих сценариев здесь, но, по крайней мере, сброс соединения должен сработать. Помимо сброса соединения в функции, я также закрываю его только один раз в конце php-скрипта.
Каков правильный способ хотя бы сбросить соединение?
MySQL my.ini:
[mysqld]
max_allowed_packet = 128M
connect-timeout=10800
wait_timeout = 28800
Apache:
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() amp;amp; $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());
}
}
Комментарии:
1. разве для выполнения php-скрипта не требуется 40-50 минут, как насчет запуска его как задания cron?
2. я знаю, что, возможно, запросы и мультизапросы еще не оптимизированы, но накопленное время связано с ожиданием ответов от других API.