MySQL server has gone away (error 2006)
Две наиболее распространенные причины получения ошибки MySQL server has gone away (error 2006) это..
- Сервер закрыл соединение по таймауту.
Исправить можно так: проверить чтобы значение переменной wait_timeout в конфиг файле MySql — my.cnf было достаточным для выполнения скрипта.
На Debian: нужно выполнить012sudo nano /etc/mysql/my.cnfи установить wait_timeout = 600 ( значение задается в секундах, если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL:
012sudo /etc/init.d/mysql restartЯ не проверял, но значение по-умолчанию для wait_timeout можно установить вплоть до 28800 секунд (8 часов).
- Сервер сбрасывает (отклоняет) неправильные или слишком большие пакеты. Если mysqld получает пакет данных, который слишком большой или не корректный, он думает что что-то пошло не так или с клиентом случилась какая-то беда и закрывает соединение. Часто такая ошибка возникает при импорте дампов содержащих большие тексты.
Так же такое происходит, когда у Вас слишком большой запрос. Например, вы хотите в поле типа longtextзаписать какую-нибудь книгу, в которой текста на 20 мб. Либо хотите сохранить большой файл (например картинку) в поле с типом blob. В итоге у вас получается запрос по типу
012UPDATE books SET text=«сууупер..длинный..текст» WHERE id=1Если это Ваш случай, то подумайте действительно ли Вам нужно сохранять такой текст/файл в базу, обычная практика в таких случаях, сохранить его в файл на диск, а в базу сохранить имя этого файла. Типа того
01234file_put_content(‘book.txt’, ‘сууупер..длинный..текст’);...UPDATE books SET filename=«book.txt» WHERE id=1
Исправить можно так: вы можете увеличить максимальный размер пакета увеличив значение max_allowed_packet в файле my.cnf.
На Debian нужно выполнить:012sudo nano /etc/mysql/my.cnfи установить max_allowed_packet = 64M (если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL
012sudo /etc/init.d/mysql restart
Про max_allowed_packet я так же писал здесь: ERROR 2006 (HY000) — MySQL server has gone away
Если Вы получаете ошибку MySQL server has gone away (error 2006) при использовании драйвера MySQL ODBC – можете попробовать это решение.
Оригинал исходной статьи (на англ): How to fix “MySQL server has gone away” (error 2006)