Обновление Owncloud не выполняется с таймаутом MySQL

374
user149408

Я только что обновился до новой версии Owncloud. После установки пакета .deb я запустил

sudo -u www-data php /var/www/owncloud/occ upgrade 

который дал мне:

 oc_appconfig  1/24 [=>--------------------------] 4%Doctrine\DBAL\Exception\DriverException: An exception occurred while executing 'SET unique_checks=1':  SQLSTATE[HY000]: General error: 2006 MySQL server has gone away Update failed 

Онлайн-исследование показало, что это, возможно, проблема тайм-аута MySQL, поэтому я создал /etc/mysql/my.cnfследующее содержимое:

[mysqld] interactive_timeout=86400 wait_timeout=86400 max_allowed_packet=521M 

Затем я перезапустил MySQL и повторил попытку - безрезультатно. В большинстве случаев шаг 1 не выполняется; иногда я доходил до шага 3 (всегда с одинаковым временем ожидания команды SQL).

ОС Raspbian работает на Raspberry Pi 3.

Что решит эту проблему?

-1

2 ответа на вопрос

0
Overmind

Сервер, вероятно, отбросил неверный или слишком большой пакет. Если mysqld получает слишком большой или неправильный пакет, он предполагает, что с клиентом что-то пошло не так, и закрывает соединение. Чтобы это исправить, вам нужно увеличить максимальный размер пакета max_allowed_packetв файле my.cnf, а затем перезапустить сервер MySQL: (/etc/init.d/mysql restart).

Это частая причина ошибки, описанной выше, но ее здесь не было (см. Мой ответ ниже). В буквальном смысле сообщение об ошибке просто означает, что сервер перестал отвечать - возможно, он отбросил запрос или произошел сбой, возможно, прервано сетевое соединение или другие. user149408 7 лет назад 0
Авария должна быть более детектируемой по сравнению с закрытием соединения. Ссылки также легко обнаружить, если они прерываются. Overmind 7 лет назад 0
-1
user149408

Сообщение об ошибке

SQLSTATE [HY000]: общая ошибка: 2006 сервер MySQL исчез

может означать несколько вещей: часто это относится к тайм-ауту, который можно исправить, увеличив значения тайм-аута (по умолчанию 8 часов), или указывает, что допустимый размер пакета был превышен, который можно исправить, увеличив max_allowed_packet. Это также происходит, когда сервер MySQL дает сбой в середине операции, поэтому проверьте это, когда первые две опции не дают облегчения.

После еще одного исследования я сверился с журналом MySQL. Был назван пустой файл /var/log/mysql.err, а также некоторые файлы, которые указывают на ротацию журнала.

Запуск ps -ef | grep mysqlзатем дал мне полную командную строку для процесса MySQL с параметром для файла журнала, который оказался /var/lib/mysql/<hostname>.err.

Изучение этого файла показало, что MySQL продолжал падать из-за повреждения данных, что, вероятно, повлияло на oc_filecacheтаблицу. Это объясняет, почему обновление не удалось - как восстановить после повреждения будет отдельный вопрос . Строка, отображаемая окком над индикатором выполнения, кажется, является таблицей, которая обрабатывалась при возникновении ошибки (если это неясно из журналов MySQL, где нужно искать близко, чтобы найти таблицу).