Внезапный “сервер MySQL ушел” ошибка в сайте PHP

Большинство примеров, которые я видел, использует вариант Шаблон "команда" для этого. Каждое пользовательское действие это невыполнимо, заставляет свой собственный экземпляр команды со всей информацией выполнять действие и откатывать его. Можно тогда вести список всех команд, которые были выполнены, и можно откатывать их один за другим.

14
задан lima 10 December 2009 в 22:28
поделиться

4 ответа

Как я сказал в своем обновлении, я пришел к выводу, что проблема с MySQL возникает, когда ссылка на Facebook занимает больше времени, чем максимальное время соединения с БД. Ни одно из предложений не могло преодолеть это ограничение,

11
ответ дан 1 December 2019 в 14:44
поделиться

You mention that this is an overnight task and that you're getting FaceBook data etc. Is the process running for a long time?

I've had a recent script that is moving data from one cluster to another and transforming formats etc. This script runs 24/7 moving this data across. I've found that with or without persistent connections, the MySQL libraries will still drop out after a few minutes (sometimes 5 minutes, sometimes longer).

The only way I've found to get around it for my case was to put a time check in my wrapper and to check how long it's been since the last time I reconnected before executing the query. I've set it to check if it's been greater than 2 minutes and if so, to reestablish the connection, ensuring to set the "new_link" flag (4th param) on mysql_connect is set to false.

Since changing this, I've never had the same error again.

0
ответ дан 1 December 2019 в 14:44
поделиться

Вероятно, тайм-аут соединения влияет на ваши постоянные соединения в PHP. Я видел их все время. Параметр тайм-аута находится в самом MySQL.

Возможны следующие варианты: - не использовать постоянные соединения - отключение таймаута простоя на сервере MySQL - перехват ошибки

Я всегда помещаю переподключение в свой собственный класс PDO, поэтому я даже не могу вспомнить, подключается ли PHP повторно или нет. В любом случае это легко исправить. По запросу поймать и переподключиться.

Я "генерировал" эту ошибку в прошлом с помощью InnoDB. Если вы используете этот механизм, каков результат SHOW ENGINE INNODB STATUS после сбоя?

1
ответ дан 1 December 2019 в 14:44
поделиться

Поскольку другие сайты работают, мы можем предположить, что они связаны с вашим сайтом (а не с сервером). В официальных документах упоминается, что это может произойти, если вы попытаетесь выполнить запросы после закрытия соединения с сервером. Есть ли у вас какие-либо хуки в CodeIgniter, которые что-то делают в конце запроса, когда соединение с базой данных может быть закрыто?

0
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: