Как исправить “MySQL server has gone away” (error 2006)

MySQL

Две наиболее распространенные причины получения ошибки MySQL server has gone away (error 2006) это…

1) Сервер закрыл соединение по таймауту.

Исправить можно так:
 проверить чтобы значение переменной wait_timeout в конфиг файле MySql — my.cnf было достаточным для выполнения скрипта.

На Debian
: нужно выполнить от пользователя root

nano /etc/mysql/my.cnf

и установить wait_timeout = 600 ( значение задается в секундах, если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL:

/etc/init.d/mysql restart

Я не проверял, но значение по-умолчанию для wait_timeout можно установить вплоть до 28800 секунд (8 часов).

 

2) Сервер сбрасывает (отклоняет) неправильные или слишком большие пакеты. Если mysqld получает пакет данных, который слишком большой или не корректный, он думает что что-то пошло не так или с клиентом случилась какая-то беда и закрывает соединение. Часто такая ошибка возникает при импорте дампов содержащих большие тексты.

Так же такое происходит, когда у Вас слишком большой запрос. Например, вы хотите в поле типа longtextзаписать какую-нибудь книгу, в которой текста на 20 мб. Либо хотите сохранить большой файл (например картинку) в поле с типом blob. В итоге у вас получается запрос по типу

UPDATE books SET text=«супер..длинный..текст» WHERE id=1

Если это Ваш случай, то подумайте действительно ли Вам нужно сохранять такой текст/файл  в базу, обычная практика в таких случаях, сохранить его в файл на диск, а в базу сохранить имя этого файла. Типа того

file_put_content(‘book.txt’, ‘супер..длинный..текст’);

UPDATE books SET filename=»book.txt» WHERE id=1

Исправить можно так: вы можете увеличить максимальный размер пакета увеличив значение max_allowed_packet в файле my.cnf.

На Debian нужно выполнить:

nano /etc/mysql/my.cnf

и установить max_allowed_packet = 64M (если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL

/etc/init.d/mysql restart

Обновлено: 17.03.2020 — 15:18