Общая ошибка базы данных: 2006 сервер MySQL ушел

24

Недавно я начал получать сообщение об ошибке каждый раз, когда пытаюсь добавить контент независимо от его типа. Это ошибка, которая отображается в браузере:

При обработке исключения выдается дополнительное необработанное исключение.

Исходное исключение PDO: SQLSTATE [HY000]: Общая ошибка: 2006 Сервер MySQL отключен: ВЫБЕРИТЕ СЧЕТЧИК (cid) ОТ {комментарий} ГДЕ status =: status; Массив ([: status] => 0) в comment_count_unpublished () (строка 313 из /Applications/MAMP/htdocs/modules/comment/comment.module).

дополнительный

PDOException: SQLSTATE [HY000]: общая ошибка: 2006 сервер MySQL пропал: INSERT INTO {watchdog} (uid, тип, сообщение, переменные, серьезность, ссылка, местоположение, реферер, имя хоста, временная метка) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1 ,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4,: db_insert_placeholder_5,: db_insert_placeholder_6,: db_insert_placeholder_7,: db_insert_placeholder_8,: db_insert_placeholder9) Array ([: db_insert_placeholder_0] => 1 [: db_insert_placeholder_1] => php [: db_insert_placeholder_2] =>% type:! Message в функции% (строка% строки файла%). [: Db_insert_placeholder_3] => a: 6: { s: 5: "% type"; s: 12: "PDOException"; s: 8: "! message"; s: 154: "SQLSTATE [HY000]: общая ошибка: 2006 сервер MySQL удален: ВЫБЕРИТЕ СЧЕТ (cid) ОТ {комментарий} ГДЕ status =: status; Array ([: status] = & gt; 0) "; s: 9:"% function "; s: 27:" comment_count_unpublished () "; s: 5:"% file "; s: 56:" / Applications / MAMP /htdocs/modules/comment/comment.module";s:5:"%line";i:313;s:14:"severity_level";i:3;} [: db_insert_placeholder_4] => 3 [: db_insert_placeholder_5] = > [: db_insert_placeholder_6] =>http: // localhost: 8888 /? q = узел% 2Fadd% 2Farcade-project & amp ; [: db_insert_placeholder_7] => http: // localhost: 8888 / [: db_insert_placeholder_8] => 127.0.0.1 [: db_insert_placeholder_9] => 1338336955) в dblog_watchdog () (строка 154 из / Applications / MAMP / htdocs / modules / db) dblog.module).

Я также получаю следующую ошибку в моем файле ошибок php:

Неустранимая ошибка PHP: необработанное исключение «PDOException» с сообщением «SQLSTATE [HY000]: общая ошибка: сервер MySQL 2006 исчез» в /Applications/MAMP/htdocs/includes/database/database.inc:2136

Трассировка стека:
0 /Applications/MAMP/htdocs/includes/database/database.inc(2136): PDOStatement-> execute (Array)
1 /Applications/MAMP/htdocs/includes/database/database.inc(664): DatabaseStatementBase- > execute (Array, Array)
2 /Applications/MAMP/htdocs/includes/database/database.inc(2315): DatabaseConnection-> query ('SELECT expire, ...', Array, Array)
3 / Applications / MAMP / htdocs / includes / lock.inc (167): db_query ('SELECT expire, ...', Array)
4 /Applications/MAMP/htdocs/includes/lock.inc(146): lock_may_be_available ('theme_registry: ...') )
5 /Applications/MAMP/htdocs/includes/theme.inc(447): lock_acquire ('theme_registry: ...')
6 /Applications/MAMP/htdocs/includes/bootstrap.inc(427): ThemeRegistry-> set ( Array)
7 [внутренняя функция]: DrupalCacheArray -> __ destruct ()
8 {main}, добавляемый в /Applications/MAMP/htdocs/includes/database/database.inc в строке 2136

У меня небольшие проблемы с расшифровкой этих сообщений об ошибках. Может ли кто-нибудь помочь мне понять, что здесь происходит?

Mike2012
источник

Ответы:

31

9 раз из 10 эта ошибка вызвана недостаточно большим max_allowed_packetпараметром в файле my.cnf вашего сервера MySQL.

В моем опыте стандартное значение по умолчанию для MAMP - 1M, чего обычно недостаточно для Drupal (особенно учитывая размер некоторых строк кеша, которые он генерирует).

Попробуйте постепенно увеличивать этот параметр, чтобы увидеть, исчезла ли ошибка. Я уверен, что быстрый поиск в Google скажет вам, как это сделать в MAMP.

Клайв
источник
К счастью, мой случай не попал в категорию 1 раз из 10. Ваши рекомендации сработали как шарм! Благодарность!
Mike2012
Столкнувшись с той же ошибкой в ​​Windows.
Сконфигурировали
А в случае виртуального хостинга, что я могу сделать?
Мохаммед Амин Буркади
Свяжитесь с вашим хостом, попросите их внести изменения. Если они не могут / не хотят, вам нужно решить, подходит ли вам этот хост @mohammedaminebourkadi.
Клайв
6

Эта ошибка MySQL / MariaDB:

Ошибка: 2006 ( CR_SERVER_GONE_ERROR) - сервер MySQL ушел

в основном означает, что клиент не может отправить вопрос на сервер .

Это может произойти из-за временного сбоя, слишком большого или неправильного запроса SQL, неправильной настройки вашего сервера или ограничения вашего хостинг-провайдера.

В общем, эта ошибка может быть результатом нескольких вещей, таких как:

  • запрос к серверу неверный или слишком большой,

    Решение: увеличить max_allowed_packetпеременную .

    Примечание: убедитесь, что переменная находится в [mysqld]разделе, а не [mysql].

    Примечание. Не забудьте перезапустить сервер MySQL / MariaDB.

  • Вы получили тайм-аут из соединения TCP / IP на стороне клиента.

    Решение: увеличить wait_timeoutпеременную .

  • Вы попытались выполнить запрос после того, как соединение с сервером было закрыто.

    Решение: Логическая ошибка в приложении должна быть исправлена.

  • Ошибка поиска имени хоста (например, проблема с DNS-сервером) или сервер был запущен с --skip-networkingпараметром.

    Другая возможность заключается в том, что ваш брандмауэр блокирует порт MySQL (например, 3306 по умолчанию).

  • Работающий поток был уничтожен, поэтому повторите попытку.

  • Вы столкнулись с ошибкой, когда сервер погиб при выполнении запроса.

  • Клиент, работающий на другом хосте, не имеет необходимых прав для подключения.

  • И многое другое, так что узнайте больше на: B.5.2.9 Сервер MySQL ушел .

Для получения более подробной информации, пожалуйста, проверьте ваш MySQL или системные журналы (например /var/log/messages).

Для отладки сервера или клиента MySQL, пожалуйста, проверьте: 26.5 Отладка и портирование MySQL .


Если вы пытаетесь импортировать базу данных из файла с помощью команды drushили mysql, вы можете:

  • Добавьте опцию force ( -f) для mysqlпродолжения и выполнения остальных запросов.

    Это полезно, если в базе данных есть несколько больших запросов, связанных с кешем, которые большие, но все равно не актуальны.

    Используя drush, попробуйте:cat foo.sql | $(drush sqlconnect) -f

  • Попробуйте применить --max-allowed-packetопцию для mysqlс меньшими значениями.

  • Увеличьте max_allowed_packetиwait_timeout в конфигурации вашего сервера (например ~/.my.cnf).

  • Снова создайте дамп исходной базы данных, используя --skip-extended-insertопцию, чтобы разбить большие запросы. Затем импортируйте файл снова.


Смотрите также: ОШИБКА 2006 (HY000): сервер MySQL исчез

kenorb
источник
3

Ответ, который обычно дает @Clive, имеет место, но может быть и дополнительная причина, особенно с формами добавления узлов.

Формы добавления узлов обычно имеют большой размер, и для их обработки может потребоваться много памяти (особенно, если во время сохранения выполняется обработка изображений, например, с помощью модулей обрезки). Если серверу не хватает памяти, процесс mysqld может быть уничтожен, что приводит к тому же самому «пропавшему» сообщению.

Ключ в том, чтобы посмотреть в журналах сервера. На компьютере с CentOS вы можете увидеть следующую запись в / var / log / messages

1 января 00:00:00 ядро ​​сервера: нехватка памяти: убить процесс XXXX (mysqld) счет XXX или принести в жертву ребенка
1 января 00:00:00 ядро ​​сервера : убить процесс XXXX, UID XX, (mysqld) total-vm: XXXkB , anon-rss: XXXkB, файл-rss: XXkB

Решение здесь состоит в том, чтобы либо добавить больше оперативной памяти, либо добавить / увеличить своп.

mpdonadio
источник