PHP MySQL установить тайм-аут соединения

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

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

6 ответов


параметр 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');   

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

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


используйте 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, который не блокирует текущий поток для операции ввода-вывода, такой как запрос.