Как исправить “MySQL server has gone away” (error 2006)
Две наиболее распространенные причины получения ошибки MySQL server has gone away (error 2006) это..
- Сервер закрыл соединение по таймауту.
Исправить можно так: проверить чтобы значение переменной wait_timeout в конфиг файле MySql - my.cnf было достаточным для выполнения скрипта.
На Debian: нужно выполнить
123sudo nano /etc/mysql/my.cnf
и установить wait_timeout = 600 ( значение задается в секундах, если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL:
123sudo /etc/init.d/mysql restart
Я не проверял, но значение по-умолчанию для wait_timeout можно установить вплоть до 28800 секунд (8 часов). - Сервер сбрасывает (отклоняет) неправильные или слишком большие пакеты. Если mysqld получает пакет данных, который слишком большой или не корректный, он думает что что-то пошло не так или с клиентом случилась какая-то беда и закрывает соединение. Часто такая ошибка возникает при импорте дампов содержащих большие тексты.
Так же такое происходит, когда у Вас слишком большой запрос. Например, вы хотите в поле типа longtext записать какую-нибудь книгу, в которой текста на 20 мб. Либо хотите сохранить большой файл (например картинку) в поле с типом blob. В итоге у вас получается запрос по типу
123UPDATE books SET text="сууупер..длинный..текст" WHERE id=1Если это Ваш случай, то подумайте действительно ли Вам нужно сохранять такой текст/файл в базу, обычная практика в таких случаях, сохранить его в файл на диск, а в базу сохранить имя этого файла. Типа того
12345file_put_content('book.txt', 'сууупер..длинный..текст');...UPDATE books SET filename="book.txt" WHERE id=1
Исправить можно так: вы можете увеличить максимальный размер пакета увеличив значение max_allowed_packet в файле my.cnf.
На Debian нужно выполнить:123sudo nano /etc/mysql/my.cnfи установить max_allowed_packet = 64M (если ошибка не пропадет поиграйтесь с этим значением, чтобы найти оптимальное), после этого нужно рестартануть MySQL
123sudo /etc/init.d/mysql restart
Про max_allowed_packet я так же писал здесь: ERROR 2006 (HY000) - MySQL server has gone away
Author: | Tags: /
| Rating:
22 comments.
Write a comment