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

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

17.10.2012 22 comments » Views: 95,734

 

mysql

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

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

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

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

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

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

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

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


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

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

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

Про max_allowed_packet я так же писал здесь: ERROR 2006 (HY000) - MySQL server has gone away

Author: | Rating: 5/5 | Tags:

22 comments.

Write a comment
  1. Игорь Reply
    30.07.2017 в 8:09 pm
    Хорошая статья, спасибо.

    Только вот если база данных больше 1гб, лимит max_allowed_packet = M предел гигабайт. Как быть?
    • Vitaliy Orlov Reply
      31.07.2017 в 12:53 am
      Привет, да все верно, сейчас лимит 1GB. Но max_allowed_packet, устанавливает лимит не на базу и даже не на таблицу, это максимальный размер значения 1го поля (т.е. если представлять таблицу, то это максимальное значение которое можно записать в конкретную ячейку, при этом кол-во таких ячеек не ограничивается). Если стоит задача, хранить в базе сущности, минимальный размер которых свыше 1Гб (например, решил записать бинарные данные файла фильма в базу), то такие данные лучше хранить в виде отдельных файлов на диске, а в базу сохранять только имя файла. Думаю, немного прояснил вопрос :)
  2. Иван Reply
    05.01.2017 в 1:41 pm
    Привет Виталий!!
    Есть проблема в работе в консоли в Open Server.
    Не получается вывести таблицу в консоли с базы данных.
    Выдает ошибку Error 2006 (HY000)
    Open Server запускаю с администратора, во всех файлах конфигурации начиная с MySQL 5.1 в папке OpenServer\userdata\config я изменил значение
    max_allowed_packet = 128M
    wait_timeout=28800
    Open Server свежий на винде 10 и 8.1 такая проблема. Я в стопоре, если не сложно подскажи как сделать работу в консоли Open Servera стабильной. Нигде не могу найти более подробную информацию, так как я новичек в MySQL.
    Очень буду благодарен!!!
    • Vitaliy Orlov Reply
      05.01.2017 в 3:32 pm
      Привет,
      1) убедись что установленные тобой значения, используются в MySQL:

      SHOW VARIABLES LIKE 'max_allowed_packet';
      SHOW VARIABLES LIKE 'wait_timeout';
      2) попробуй ограничить запрос:

      SELECT * FROM table LIMIT 1
  3. алексей Reply
    05.01.2017 в 1:19 pm
    Ни как ни магу решить проблему не помножите что только не делал 50 процентов сторонниц выдает Ошибок MySQL!
    ------------------------

    Возвращена ошибка:
    сервер MySQL ушел

    номер ошибки:
    2006
    • Vitaliy Orlov Reply
      05.01.2017 в 3:35 pm
      Не ясно что ты делаешь и как, но могу предположить что нужно установить опцию max_allowed_packet, как указано в статье. 50% страниц падает, из-за того, что при генерации этих страниц, запросы к бд, используют текстовые или иные поля, размер которых превышает max_allowed_packet
  4. Иван Reply
    04.01.2017 в 11:09 pm
    Виталий приветствую!
    У меня не получается вывести таблицу в open server в консоли open servera.
    К базе подключаюсь в консоли в общем все этапы прохождения до момента вывода таблицы
    SELECT * FROM здесь название таблицы; Дальше выводит ошибку 2006.
    Винда 10, open server запускаю от имени администратора. Во всех файлах MySQL - x.x_my.ini в папке userdata / config я поменял значения в max_allowed_packet на 128М и wait_timeout=28800.
    Я новичек в данной сфере интереса много но вот никак не получается решить данную задачу чтобы все работало как часики. Да настройки в open server apache-2.4 , PHP-5.5 , MySQL 5.5. Сам open server свежий
    Очень очень буду благодарен за подробный ответ и да на winde 8.1 проблема та же.
    Заранее огромное спасибо!
  5. Александр Reply
    16.08.2016 в 8:49 pm
    Помогло, спасибо!
  6. Руслан Reply
    02.08.2016 в 4:41 pm
    Здравствуйте, у мя такая ошибка на сайте mysql server has gone away,как решить?
  7. odo Reply
    15.07.2016 в 12:53 am
    Спасибо. Помогло))
  8. Khayal Reply
    13.07.2016 в 11:54 pm
    Здравствуйте я могу вам отправит скрипт полный вы мне оптимизация сделали я кого спрошу не понимают MySQL server has gone away это пойавится и тормозит прощу помощь
    • Vitaliy Orlov Reply
      14.07.2016 в 1:27 am
      Привет, я понятия не имею что вызывает ошибку в твоём случае, поэтому не могу помочь. Обратись за помощью к системным администраторам на фриланс: weblancer.net или fl.ru . За небольшую плату, специалисты разберутся что вызывает данную ошибку и либо исправят, либо расскажут что нужно сделать для её исправления.
  9. andrey Reply
    11.11.2014 в 11:47 am
    Спасибо.
    Более полное описание данной проблемы можно почитать здесь
    http://dev.mysql.com/doc/refman/5.1/en/gone-away.html
  10. doomer Reply
    23.09.2014 в 8:39 am
    Грац! Помогло.
  11. Александр Reply
    27.07.2014 в 9:20 pm
    Спасибо Веталий, помог.
  12. Владимир Reply
    17.06.2014 в 3:28 pm
    А если сайт хостится на стороннем хостере, например, на nic.ru.
    Там вряд ли будет доступ до этих настроек. Как болроться с подобной ошибкой?
    Кстати, ошибка возникает периодически и никаких особо-тяжелых запросов не делает.
    Буду благодарен за любые советы.
    • Vitaliy Orlov Reply
      18.06.2014 в 3:57 am
      В таком случае лучше всего обратиться в хостеру, чтобы он изучил проблему на своей стороне и либо сделал дополнительные настройки, либо дал рекомендации к оптимизации сайта (в частности, они могут логировать проблемные запросы). Если же хостер не сможет решить эту проблему, советую его сменить.
  13. Илья Reply
    17.04.2014 в 10:41 am
    Виталий Большое Спасибо ВАМ!! Будьте здоровы!!
    • Vitaliy Orlov Reply
      27.04.2014 в 8:40 am
      Спасибо :)
  14. Серджио (Пеня) Reply
    13.10.2013 в 11:50 pm
    В очередной раз ища решения проблемы натыкаюсь на твой сайт, спасибо Веталь!
    • Vitaliy Orlov Reply
      28.10.2013 в 8:19 pm
      Пожалуйста. Пиши, звони, приходи в гости :D

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>