PHP MySQL устанавливает тайм-аут подключения

Есть определенные сообщения о тайм-ауте подключения MySQL, установленном из PHP с использованием mysql.connect_timeout. Я хочу знать, является ли этот установленный тайм-аут из PHP просто тайм-аутом для первоначального подключения к MySQL или действителен для конкретного запроса к базе данных?

Мой случай заключается в том, что у меня есть страница с подключением к MySQL сверху, а затем я выполняю, скажем, 3-4 запроса к MySQL один за другим. Для выполнения 1-го и 2-го запросов потребовалось всего 1-2 секунды, тогда как 3-й запрос занимает 20 секунд. Теперь, в случаях, когда третий запрос занимает более 20 секунд, я хочу вызвать тайм-аут. Итак, вопрос здесь в том, что установка этого тайм-аута из PHP применима к начальному подключению к базе данных или применима к каждому последующему запросу (независимо). Если позже, то как я могу установить тайм-аут через 20 секунд для третьего запроса?


person kb0000    schedule 05.03.2012    source источник


Ответы (6)


Параметр connect_timeout действителен только во время соединения. Полезно проверить, доступен ли ваш сервер БД через 20 секунд или около того. После подключения указанный тайм-аут больше не действует.

Я не нашел ни одного параметра времени ожидания запроса на официальной странице руководства mysql: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html, поэтому я не думаю, что это возможно.

person dAm2K    schedule 08.03.2012

видеть это:

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   
person gsdfghs4f5a74a    schedule 16.08.2013
comment
max_execution_time влияет только на использование процессора - запрос к базе данных не влияет на использование процессора из процесса php - person iRaS; 17.08.2015
comment
set_time_limit (0); бесполезен вне цикла - person Viktor Joras; 11.06.2019

сигаларм - ваш друг. Вы можете установить будильник и использовать обработчик сигнала для его обнаружения.

http://php.net/manual/en/function.pcntl-alarm.php

person Sheer    schedule 03.12.2012
comment
выглядит интересно, можно пример? - person iRaS; 17.08.2015

Используйте MySQL версии 5.7.4 или выше и установите соответствующую переменную max_statement_time, запрос завершится неудачно, если истечет время ожидания.

см. http://mysqlserverteam.com/server-side-select-statement-timeouts/ < / а>

person Laurent PELE    schedule 04.01.2016

Он находится в вашем файле конфигурации php. Расположение этого файла отличается от одной системы к другой. В Ubuntu и Debian он находится в /etc/php5/apache2/php.ini

mysql.connect_timeout = 60 /* the default value is 60 seconds */
person Kareem    schedule 10.03.2016
comment
какое-либо объяснение того, почему я проголосовал против рабочего ответа? - person Kareem; 02.01.2017
comment
Потому что он изменяет конфигурацию всей системы, что может повлиять на другое приложение. - person krisanalfa; 30.01.2019

Вам придется разветвлять дочерний процесс, родительский процесс убьет дочерний процесс, если какое-то условие не будет выполнено в течение 20 секунд.

Или используйте такой язык, как node.js, который не блокирует текущий поток для операции ввода-вывода, такой как запрос.

person Josh Ribakoff    schedule 16.06.2014