Загальна помилка бази даних: 2006 сервер MySQL пішов


24

Нещодавно я почав отримувати помилку кожного разу, коли намагаюся додати вміст незалежно від типу. Це помилка, яка з’являється в браузері:

Додатковий винятковий виняток, кинутий під час обробки винятку.

Оригінальний PDOException: SQLSTATE [HY000]: Загальна помилка: 2006 MySQL-сервер пішов: SELECT COUNT (cid) ВІД {коментар} WHERE status =: status; Масив ([: status] => 0) в comment_count_unpublished () (рядок 313 /Applications/MAMP/htdocs/modules/comment/comment.module).

Додатковий

PDOException: SQLSTATE [HY000]: Загальна помилка: 2006 MySQL-сервер відійшов: ВСТУПУЄТЬСЯ {сторожовий}} (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_placeholder_8,: db_insert_placeholder_8,: db_insert Масив ([: db_insert_placeholder_0] => 1 [: db_insert_placeholder_1] => php [: db_insert_placeholder_2] =>% type:! Повідомлення у% function (рядок% рядок% file). [: Db_insert_placeholder_3] => a: 6: { s: 5: "% type"; s: 12: "PDOException"; s: 8: "! message"; s: 154: "SQLSTATE [HY000]: Загальна помилка: Сервер MySQL 2006 пішов: ВИБІРТЕ КУХНУ (cid) ВІД {коментар} WHERE status =: статус; Array ([: status] => gt; 0) "; s: 9:"% function "; s: 27:" comment_count_unpublished () "; s: 5:"% file "; s: 56:" / Програми / MAMP /htdocs/modules/comment/comment.module" ;sgery:"%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-проект & 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 / module / db / dlog / module / 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 / include / lock.inc (167): db_query ('SELECT закінчується, ...', масив)
4 /Applications/MAMP/htdocs/includes/lock.inc(146): lock_may_be_available ('theme_registry: ...') )
5 /Applications/MAMP/htdocs/includes/theme.inc(447): lock_acquire ('topic_registry: ...')
6 /Applications/MAMP/htdocs/includes/bootstrap.inc(427): ThemeRegistry-> set ( Масив)
7 [внутрішня функція]: DrupalCacheArray -> __ destruct ()
8 {main}, кинутий у /Applications/MAMP/htdocs/includes/database/database.inc на лінії 2136

У мене виникають невеликі проблеми з розшифровкою цих повідомлень про помилки. Може хтось допоможе мені зрозуміти, що тут відбувається?

Відповіді:


31

У 9 разів з 10 ця помилка викликана недостатньо великою max_allowed_packetнастройкою у файлі my.cnf вашого сервера MySQL.

За моїм досвідом стандартний типовий параметр для MAMP - 1М, що зазвичай не достатньо для Drupal (особливо враховуючи розмір деяких рядків кешу, які він генерує).

Спробуйте збільшувати це налаштування поступово, щоб побачити, чи помилка зникає. Я впевнений, що швидкий пошук у Google підкаже, як це зробити в MAMP.


На щастя, мій випадок не потрапляв 1 раз із 10 категорії. Ваші рекомендації спрацювали як шарм! Спасибі!
Майк2012

Зіткнувшись з тією ж помилкою у 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 пішов


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

Рішення тут - або додати більше оперативної пам’яті, або додати / збільшити своп.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.