PHP MySQL установить время ожидания подключения - PullRequest
9 голосов
/ 05 марта 2012

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

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

Ответы [ 6 ]

6 голосов
/ 08 марта 2012

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

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

4 голосов
/ 16 августа 2013

см.

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   
3 голосов
/ 03 декабря 2012

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

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

2 голосов
/ 10 марта 2016

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

mysql.connect_timeout = 60 /* the default value is 60 seconds */
2 голосов
/ 04 января 2016

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

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

0 голосов
/ 17 июня 2014

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

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

...