Сегодня один из моих сайтов начал показывать
Error Number: 2006 MySQL server has gone away
Это клиентский сайт с низким трафиком, работающий под управлением Apache 2.2.9 (Debian), PHP 5.2.6-1+lenny3 (с использованием фреймворка CodeIgniter 1.7.1) и MySQL 5.0.51a. Я, очевидно, повторно исследовал ошибку, но все возможные решения подразумевают, что происходят большие запросы, которые могут истечь по тайм-ауту и сбросить соединение или превысить лимит пакетов. Однако это не так, это небольшая база данных, обрабатываемая простейшими запросами. Чтобы быть уверенным в этом, я сделал несколько запросов, чтобы вернуть одну строку, все та же ошибка.
Учетные данные базы данных в порядке, я даже могу войти прямо в mysql, выполнить некоторые запросы сайта и мгновенно получить нужные данные. Есть несколько других сайтов на том же сервере и соединения с базой данных, сайты гораздо большего размера, и все они не имеют проблем.
Я старался:
- Перезапуск MySQL
- Перезагрузка всего сервера
- Ищем ошибки в логах (как Apache, так и MySQL, нет)
- Проверка прав пользователя БД
- Изменение
mysql.connect_timeout
иdefault_socket_timeout
в PHP - Изменение
max_allowed_packet
в MySQL - Чтение официальной документации, форума и всего в SO, что говорит "сервер MySQL ушел"
Новое:
- Отключение постоянных соединений в PHP
- Изменение
wait_timeout
иconnect_timeout
в MySQL
Обновление:
Кажется, это связано со временем выполнения моего скрипта: он извлекает некоторую информацию с помощью PHP-клиента Facebook, и сегодня этот вызов, похоже, случайно не работает, поэтому у меня либо нет данных из Facebook, либо ошибка MySQL. Но, к моему удивлению, ни одно из приведенных решений, похоже, не имеет отношения к тайм-ауту.
Есть идеи? Спасибо за уделенное время!