Есть определенные сообщения о времени подключения к MySQL из PHP с использованием mysql.connect_timeout. Я хочу знать, установлен ли этот тайм-аут PHP из времени первоначального подключения к MySQL или действителен для конкретного запроса к базе данных?
Мое дело в том, что у меня есть страница с подключением к MySQL сверху, а затем я выполняю 3-4 запроса к MySQL один за другим. 1-й и 2-й запросы выполняются всего 1-2 секунды для выполнения, когда третий запрос занимает 20 секунд. Теперь, когда третий запрос занимает более 20 секунд, я хочу назвать тайм-аут. Итак, вопрос заключается в том, что установка этого времени из PHP применима к первоначальному подключению к базе данных или применима к каждому последующему запросу (независимо). Если это так, то как я могу установить его на тайм-аут через 20 секунд для третьего запроса?
Параметр connect_timeout действует только во время соединения. Полезно проверить, доступен ли ваш сервер БД за 20 секунд или около того. После подключения указанный таймаут больше недействителен.
Я не могу найти параметр таймаута запроса на официальной странице руководства mysql: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html, поэтому я не думаю, что это возможно.
Сигаларм – ваш друг. Вы можете установить будильник и использовать обработчик сигнала для обнаружения тревоги.
видеть это:
set_time_limit(0); ini_set('mysql.connect_timeout','0'); ini_set('max_execution_time', '0');
Используйте MySQL версии 5.7.4 или выше и установите соответствующую переменную «max_statement_time», запрос завершится с ошибкой при достижении тайм-аута
см. http://mysqlserverteam.com/server-side-select-statement-timeouts/
Он находится в файле конфигурации php. Местоположение этого файла отличается от одной системы другой. На Ubuntu и Debian он находится в /etc/php5/apache2/php.ini
mysql.connect_timeout = 60 /* the default value is 60 seconds */
Вам придется разбить дочерний процесс, родительский процесс убьет дочерний процесс, если какое-то условие не будет выполнено в течение 20 секунд.
Или используйте такой язык, как node.js, который не блокирует текущий поток для операции ввода-вывода, как запрос.