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